2010-01-31 31 views
6

Ok mi problema es el siguiente;Listar todos los objetos de cierta clase

Tengo una clase que describe una mascota con este constructor;

public function __construct($name, $type, $age) 

Así que lo que quiero hacer es hacer una serie de objetos de mascotas, entonces quiero imprimir todos los atributos de todos los objetos de esta clase para que se vea algo como this

¿Cuál es el La mejor manera de hacerlo? Sé cómo iterar a través de las variables de un objeto, pero mi principal preocupación es cómo recorrer todos los objetos de una determinada clase. Me encantaría que alguien pudiera mostrarme un ejemplo de código de algo, particularmente si hay una manera de hacerlo sin el uso de arreglos.

¡Se agradece cualquier ayuda!

+0

duplicado: http://stackoverflow.com/questions/475569/get-all-instances-of-a-class-in-php/483094 – troelskn

Respuesta

1

Normalmente se puede esperar a tener alguna forma de seguimiento de los casos que ha creado, tal vez en una matriz o algún tipo de clase contenedora.

Pero por el bien de la discusión, se puede comprobar todas las variables en el ámbito actual con get_defined_vars(), buscando recursivamente las matrices u objetos que encuentra, con algo como esto:

function findInstancesOf($classname, $vars) 
{ 
    foreach($vars as $name=>$var) 
    { 
     if (is_a($var, classname)) 
     { 
      //dump it here 
      echo "$name is a $classname<br>"; 

     } 
     elseif(is_array($var)) 
     { 
      //recursively search array  
      findInstancesOf($classname, $var); 
     } 
     elseif(is_object($var)) 
     { 
      //recursively search object members 
      $members=get_object_var($var);  
      findInstancesOf($classname, $members); 
     } 
    } 
} 

$vars = get_defined_vars(); 
findInstancesOf('MyPetClass', $vars); 
5

Se podría, en el constructor de la clase, agregue $this a una matriz estática que mantiene todos los elementos de este tipo:

class Pet { 
    public static $allPets = array(); 
    function __construct($name, $type, $age) { 
     self::$allPets[] = $this; 
     // more construction 
    } 
} 

Su lista de todos los objetos para mascotas se encuentra ahora en Pet::$allPets.

1

Supongo que depende de su estructura, pero tendría otro objeto/clase que contenga todos los objetos de mascotas generados, así que me gustaría recorrerlo.

+0

quizá un ejemplo de cómo crear este objeto ayudaría ? – DForck42

1

Bueno, usted podría hacer una costumbre opción de crear y utilizar variables estáticas para almacenar una instancia de cada clase creada

Class Pet 
{ 
    public static $pets = array(); 
    public static create($name, $type, $age) 
    { 
     $pet = new Pet($name, $type, $age); 
     self::$pets[] = $pet; 
     return $pet; 
    } 
} 
Pet::createPet("test", "test", 42); 
Pet::createPet("test", "test", 42); 
Pet::createPet("test", "test", 42); 

foreach(Pet::$pets as $pet) 
{ 
    echo $pet->name; 
} 
1

haría un foreach bucle

foreach($myobject as $key => $pent) 
{ 
echo $key; 
echo $pent; 

} 
Cuestiones relacionadas