Objekte in einer foreach()-Schleife, kann man die referenzieren?
Andreas-Lindig
- php
Hallo Forum,
Ich hab mal ne Frage zu folgendem Problem:
eine Sammlung von Objekten -> $Objekte[0] = $objekt1,
$Objekte[1] = $objekt2 usw...
//durchrattern in einer foreach-Schleife
//und für jedes Objekt Eigenschaften mit einer Methode ändern
foreach($objekte as $ein_objekt)
$ein_objekt->eigenschaft_aendern()
//Objekte ausgeben
foreach($objekte as $ein_objekt)
$ein_objekt->ausgeben()
nun haben sich die Eigenschaften in den Original-Objekten aber nicht geändert. Wenn ich das Ganze aber mit einer for-Schleife mache und statt $ein_objekt immer $objekte[$i] aufrufe funktioniert es. Ich schließe daraus, daß $ein_objekt in der for-Schleife eine Kopie des jeweiligen Elements ist und keine Referenz.
Ist das richtig? Und wie kann ich in einer foreach-Schleife eine Referenz bekommen, um umständliche for-Schleifen mit Zähler zu vermeiden?
Gruß, Andreas
Hi,
Ich schließe daraus, daß $ein_objekt in der for-Schleife eine Kopie des jeweiligen Elements ist und keine Referenz.
Ist das richtig? Und wie kann ich in einer foreach-Schleife eine Referenz bekommen, um umständliche for-Schleifen mit Zähler zu vermeiden?
ja - das ist richtig, foreach() arbeitet mit Kopien. Du brauchst allerdings keine Referenzen, um dein Problem zu lösen:
<?php
foreach (array_keys($objekte) as $key) {
$objekte[$key]->eigenschaft_aendern();
/*
* oder, wenn du unbedingt Referenzen haben möchtest... ;-)
*
* $val =& $objekte[$key];
* $val->eigenschaft_aendern();
*/
}
?>
Gruß,
Andreas.
Hallo Andreas,
Danke, funktioniert supi! - muß man ja einfach nur drauf kommen, gell? ;-)
Gruß, Andreas