2011-12-23 32 views
39

Así que he estado buscando por un tiempo y no puedo encontrar la respuesta a una pregunta simple. ¿Es posible tener una matriz de objetos en PHP? Tales como:Array of PHP Objects

$ar=array();  
$ar[]=$Obj1  
$ar[]=$obj2 

Por alguna razón no he podido encontrar la respuesta en ningún lado. Supongo que es posible, pero solo necesito asegurarme.

+4

sí, es posible. – Indranil

Respuesta

72

El mejor lugar para encontrar las respuestas a (preguntas y algo fácil) generales como este es leer sobre PHP docs. Específicamente en su caso, puede leer más en objects. Puede almacenar stdObject y objetos instanciados dentro de una matriz. De hecho, hay un proceso conocido como 'hydration' que rellena las variables miembro de un objeto con valores de una fila de base de datos, luego el objeto se almacena en una matriz (posiblemente con otros objetos) y se devuelve al código de llamada para acceder.

- Editar -

class Car 
{ 
    public $color; 
    public $type; 
} 

$myCar = new Car(); 
$myCar->color = 'red'; 
$myCar->type = 'sedan'; 

$yourCar = new Car(); 
$yourCar->color = 'blue'; 
$yourCar->type = 'suv'; 

$cars = array($myCar, $yourCar); 

foreach ($cars as $car) { 
    echo 'This car is a ' . $car->color . ' ' . $car->type . "\n"; 
} 
+4

He intentado el sitio php y no he podido encontrar nada. También estoy sentado con el libro "Objetos PHP, golpes y práctica" por Matt Zandstra. y no han podido encontrar ninguna información. – Beamer180

+0

@EricLarsen: Publicación actualizada. –

+1

Pregunta: Supongamos que quiere simplemente imprimir el 'color' de solo un' Coche' en esa matriz. ¿Diría 'echo $ cars [0] -> color;' para imprimir el primero, y 'echo $ cars [1] -> color;' para imprimir el segundo? –

18

Sí.

$array[] = new stdClass; 
$array[] = new stdClass; 

print_r($array); 

Resultados: en

Array 
(
    [0] => stdClass Object 
     (
     ) 

    [1] => stdClass Object 
     (
     ) 

) 
+6

Lo sincronicé y tomó 20 segundos para probarlo, incluido el tiempo de tipeo. – ceejayoz

+0

Entonces, ¿mi nombre de clase reemplazaría a stdClass? ¿Qué ocurre si el objeto ya está creado y desea agregarlo a la matriz? Puede usar constructores con el método anterior? PD. lo siento, soy nuevo en SO – Beamer180

+3

No hay nada especial al respecto. Agrégalo a la matriz como quieras. Esto es simplemente una demostración de que usted puede, muy, muy fácilmente, probar este tipo de cosas usted mismo. – ceejayoz

6

matrices puede contener punteros así que cuando quiero una matriz de objetos a hacer eso.

$a = array(); 
$o = new Whatever_Class(); 
$a[] = &$o; 
print_r($a); 

Esto mostrará que el objeto está referenciado y es accesible a través de la matriz.

5

Sí, es posible tener una matriz de objetos en PHP.

class MyObject { 
    private $property; 

    public function __construct($property) { 
    $this->Property = $property; 
    } 
} 
$ListOfObjects[] = new myObject(1); 
$ListOfObjects[] = new myObject(2); 
$ListOfObjects[] = new myObject(3); 
$ListOfObjects[] = new myObject(4); 

print "<pre>"; 
print_r($ListOfObjects); 
print "</pre>"; 
+0

¿Tenemos que seguir incrementando el índice del constructor en myObject() cada vez que queremos agregar un nuevo objeto en la matriz o es opcional? ¡Todo esto de OOP en los idiomas web es simplemente OOPS! –

+0

@YoustayIgo solo por el ejemplo, de modo que la salida distingue los objetos entre sí.Puedes poner el valor que quieras en el constructor, luego simplemente asigna ese valor a la propiedad $ propiedad del objeto. – ADyson