2011-12-23 19 views
39

Così ho cercato per un po 'e non riesco a trovare la risposta a una semplice domanda. È possibile avere una matrice di oggetti in PHP? Ad esempio:Matrice di oggetti PHP

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

Per qualche motivo non sono stato in grado di trovare la risposta da nessuna parte. Suppongo sia possibile ma ho solo bisogno di essere sicuro.

+4

sì, è possibile. – Indranil

risposta

72

Il posto migliore per trovare le risposte alle (domande e un po 'facile) generali di questo tipo è quello di leggere su PHP docs. Specificamente nel tuo caso puoi leggere di più su objects. È possibile memorizzare stdObject e oggetti istanziati all'interno di un array. Infatti, esiste un processo noto come "hydration" che popola le variabili membro di un oggetto con valori da una riga del database, quindi l'oggetto viene memorizzato in una matrice (eventualmente con altri oggetti) e restituito al codice chiamante per l'accesso.

- Modifica -

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

Ho provato il sito php e non sono stato in grado di trovare nulla. Sono anche seduto con il libro "PHP Objects, Patters and Practice" di Matt Zandstra. e non sono stato in grado di trovare alcuna informazione. – Beamer180

+0

@EricLarsen: post aggiornato. –

+1

Domanda: Supponiamo di voler stampare solo il 'color' di una sola' Car' in quella matrice. Diresti "echo $ cars [0] -> color;" per stampare il primo e "echo $ cars [1] -> color;" per stampare il secondo? –

18

Sì.

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

print_r($array); 

Risultati in:

Array 
(
    [0] => stdClass Object 
     (
     ) 

    [1] => stdClass Object 
     (
     ) 

) 
+6

L'ho cronometrato e ci sono voluti venti secondi per testare, incluso il tempo di digitazione. – ceejayoz

+0

Quindi il mio nome classe sostituirà stdClass? Cosa succede se l'oggetto è già stato creato e si desidera semplicemente aggiungerlo all'array. È possibile utilizzare i costruttori con il metodo sopra? post scriptum scusa sono nuovo di SO – Beamer180

+3

Non c'è niente di speciale. Aggiungilo all'array come preferisci. Questa è semplicemente una dimostrazione che puoi testare molto facilmente questo tipo di cose. – ceejayoz

6

Array può contenere puntatori così quando voglio un array di oggetti che faccio questo.

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

Questo mostrerà che l'oggetto è referenziato e accessibile attraverso l'array.

5

Sì, è possibile avere una matrice di oggetti in 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

Dobbiamo continuare ad incrementare l'indice di costruzione in myObject() ogni volta che vogliamo aggiungere un nuovo oggetto nell'array o è facoltativo? Tutto questo materiale OOP nei linguaggi web è semplicemente OOPS! –

+0

@YoustayIgo è solo per l'esempio, in modo che l'output distingua gli oggetti gli uni dagli altri.Puoi inserire qualsiasi valore nel costruttore, quindi assegna semplicemente quel valore alla proprietà $ della proprietà dell'oggetto. – ADyson