PHP 5.5
Sto facendo un sacco di passaggi di oggetti con l'assunto che manterranno tutte le loro identità - che qualsiasi modifica apportata ai loro stati dai metodi di altri oggetti continuerà a essere vera in seguito. Sto assumendo correttamente?
Darò qui la mia struttura di base.
class builder {
protected $foo_ids = array(); // set in construct
protected $foo_collection;
protected $bar_ids = array(); // set in construct
protected $bar_collection;
protected function initFoos() {
$this->foo_collection = new FooCollection();
foreach($this->food_ids as $id) {
$this->foo_collection->addFoo(new foo($id));
}
}
protected function initBars() {
// same idea as initFoos
}
protected function wireFoosAndBars(fooCollection $foos, barCollection $bars) {
// arguments are passed in using $this->foo_collection and $this->bar_collection
foreach($foos as $foo_obj) { // (foo_collection implements IteratorAggregate)
$bar_ids = $foo_obj->getAssociatedBarIds();
if(!empty($bar_ids) ) {
$bar_collection = new barCollection(); // sub-collection to be a component of each foo
foreach($bar_ids as $bar_id) {
$bar_collection->addBar(new bar($bar_id));
}
$foo_obj->addBarCollection($bar_collection);
// now each foo_obj has a collection of bar objects, each of which is also in the main collection. Are they the same objects?
}
}
}
}
Ciò che mi preoccupa è che foreach
funzioni presumibilmente su una copia dei suoi array. Voglio tutti gli oggetti $ foo e $ bar per mantenere le loro identità indipendentemente da quale oggetto di raccolta $ diventano parte di. Ha senso?
EDIT: la mia comprensione è che l'utilizzo della parola chiave clone
è l'unico modo per copiare realmente un oggetto in PHP 5+. In pratica, l'operatore di assegnazione crea semplicemente un altro riferimento allo stesso oggetto. Spero che anche i valori di ritorno e foreach
funzionino in questo modo.