Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[SOLUCIONADO] Hacer casting en un array

Estas en el tema de Hacer casting en un array en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola! tengo un problemilla, a ver si me pueden echar una mano. Tengo 2 clases, la clase Persona y la clase Alumno (que hereda de ...
  #1 (permalink)  
Antiguo 19/01/2013, 16:55
Avatar de Cristy_blk  
Fecha de Ingreso: abril-2010
Ubicación: Granada
Mensajes: 66
Antigüedad: 14 años
Puntos: 0
Hacer casting en un array

Hola! tengo un problemilla, a ver si me pueden echar una mano.
Tengo 2 clases, la clase Persona y la clase Alumno (que hereda de Persona). He creado varios objetos de tipo Persona y algunos de tipo Alumno y los he metido dentro de un array.
Estas dos clases tienen métodos comunes (por ejemplo toString) y en cada una de ellas muestro una información. Al recorrer el array solo me muestra el toString de los objetos Persona... Cómo podría diferenciarlos para poder mostrarlos??

os dejo parte del código, gracias adelantadas ^^

Clase Alumno:
Código PHP:
function toString(){
        
$resultado parent::toString() . "Está estudiando "$this->getTitulacion();
        
$resultado += "\nEstá matriculado en: <br>";

        foreach(
$this->asignaturas as $i => $j){
            
$resultado += $j->toString() . "<br>";
        }

        
$resultado += "Total de creditos : " $this->getNumCreditos();
        return 
$resultado;
    } 
Clase Persona
Código PHP:
function toString(){
        return 
"Nombre: " $this->nombre " nacido el " $this->fechaNacimiento->format("d/m/Y") ." <br>";
    } 
Index
Código PHP:
         include_once("Persona.php");
         include_once(
"Alumno.php");
         include_once(
"Asignatura.php");
         include_once(
"Comparador.php");

         
$asig1 = new Asignatura('1','PDOO',6);
         
$asig2 = new Asignatura('2','FIS',6);
         
$asig3 = new Asignatura('3','SO',6);

         
$p1 = new Persona('Ana', new DateTime('25-0-1971'));
         
$p2 = new Persona('Juan', new DateTime('14-4-1990'));
         
$p3 = new Persona('Pepa', new DateTime('5-10-2000'));
         
$p4 = new Persona('Andrea', new DateTime('26-0-1975'));
         
$a1 = new Alumno('Maria', new DateTime('13-7-1960'), 'informática');
         
$a2 = new Alumno('Antonio', new DateTime('5-10-2000'), 'informática');
         
$a3 = new Alumno('Ana', new DateTime('10-6-1995'), 'informática');

         try{
            
$a1->matricularAsignatura($asig1);
            
$a1->matricularAsignatura($asig2);
            
$a3->matricularAsignatura($asig2);
            
$a3->matricularAsignatura($asig3);
         }catch (
Exception $ex){
             echo 
$ex->getMessage();
         }
         
         
$personas = array();
         
array_push($personas$p1);
         
array_push($personas$p2);
         
array_push($personas$p3);
         
array_push($personas$p4);
         
array_push($personas$a1);
         
array_push($personas$a2);
         
array_push($personas$a3);
         
         foreach(
$personas as $p){
             if(
$p instanceof Alumno)
               echo 
$p->toString();
             else
               echo 
$p->toString();
         } 
__________________
Noticias recientes del mundo informático
La Mancha Negra
  #2 (permalink)  
Antiguo 19/01/2013, 17:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Hacer casting en un array

Pues usando instanceof es la forma correcta de hacerlo, aparte deberías de usar __toString() para que haga casting de forma automática.

Saludos.
  #3 (permalink)  
Antiguo 19/01/2013, 17:28
Avatar de Cristy_blk  
Fecha de Ingreso: abril-2010
Ubicación: Granada
Mensajes: 66
Antigüedad: 14 años
Puntos: 0
Respuesta: Hacer casting en un array

Ya uso el instanceof y nada... aún así lo he cambiado a __toString() pero sigue sin funcionar. Me muestra la información de la clase Persona pero de Alumno nada... solo 0 :(
__________________
Noticias recientes del mundo informático
La Mancha Negra
  #4 (permalink)  
Antiguo 19/01/2013, 17:38
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Hacer casting en un array

Recuerda que en PHP se concatena con un "."
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 20/01/2013, 15:10
Avatar de Cristy_blk  
Fecha de Ingreso: abril-2010
Ubicación: Granada
Mensajes: 66
Antigüedad: 14 años
Puntos: 0
Respuesta: Hacer casting en un array

Cita:
Iniciado por masterpuppet Ver Mensaje
Recuerda que en PHP se concatena con un "."
Como puedes comprobar en mi código, eso ya lo se...
__________________
Noticias recientes del mundo informático
La Mancha Negra
  #6 (permalink)  
Antiguo 20/01/2013, 15:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Hacer casting en un array

Código PHP:
Ver original
  1. $resultado += "\nEstá matriculado en: <br>";

yo ahí veo un "+" donde debería ir un "."
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 20/01/2013, 16:25
Avatar de Cristy_blk  
Fecha de Ingreso: abril-2010
Ubicación: Granada
Mensajes: 66
Antigüedad: 14 años
Puntos: 0
Respuesta: Hacer casting en un array

Ups :S... Zaas en toda la boca
Gracias XD
__________________
Noticias recientes del mundo informático
La Mancha Negra
  #8 (permalink)  
Antiguo 21/01/2013, 07:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Hacer casting en un array

__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:52.