Hallo, ik zit een beetje met vraagtekens in mijn hoofd.
Ik heb een hierarchische tree opgeslagen in een database en ben die nu aan het "terug" naar een object.
Simpel gezegt is het een Menu en Menu Item klasse die aangemaakt worden door een Data Access Object.
Het menu bevat alle menu items en een menu item heeft children en zowaar een parent.
Ik heb nu alleen een paar vraag tekens bij 2 functies, die vrijwel hetzelfde doen.
Dit is in MenuItem
Dit is in Menu
In beide gevallen wil ik het object bijhouden in ander object:
Ik zie nu net dat de "root" zetten nog anders is...
In alle gevallen wordt de methode aangeroepen met een &, dus
Maar in de methode "moet" ik de & weg laten. Als ik die er wel neer zet, worde alle elementen in de array hetzelfde, als het laatste object.
Mijn ding werkt zo en als ik element los uit het Menu haal en verander, dan zijn ze in het menu ook veranderd.
Dit werkt.
Kan iemand mij misschien vertellen waarom dit zo is. Alle informatie over refenenties binnen php is welkom!
Ik draai (op het moment) PHP Version 4.3.1
Ik heb een hierarchische tree opgeslagen in een database en ben die nu aan het "terug" naar een object.
Simpel gezegt is het een Menu en Menu Item klasse die aangemaakt worden door een Data Access Object.
Het menu bevat alle menu items en een menu item heeft children en zowaar een parent.
Ik heb nu alleen een paar vraag tekens bij 2 functies, die vrijwel hetzelfde doen.
PHP:
1
2
3
4
5
6
| function addChild(&$child) { if (is_a($child, "MenuItem")) { $child->setParent($this); $this->children[] = $child; } } |
Dit is in MenuItem
PHP:
1
2
3
4
5
6
7
8
9
| function addItem(&$item) { if (is_a($item, "MenuItem")) { $this->items[$item->getIdentifier()] = $item; if (is_null($item->getParent())) { $this->root = &$item; } } } |
Dit is in Menu
In beide gevallen wil ik het object bijhouden in ander object:
PHP:
1
2
3
4
5
| $child->setParent($this); $this->children[] = $child; $this->items[$item->getIdentifier()] = $item; $this->root = &$item; |
Ik zie nu net dat de "root" zetten nog anders is...
In alle gevallen wordt de methode aangeroepen met een &, dus
PHP:
1
2
| $parent->addChild(&$item); $menu->addItem(&$item); |
Maar in de methode "moet" ik de & weg laten. Als ik die er wel neer zet, worde alle elementen in de array hetzelfde, als het laatste object.
Mijn ding werkt zo en als ik element los uit het Menu haal en verander, dan zijn ze in het menu ook veranderd.
PHP:
1
2
3
4
5
6
7
8
| $item = &$menu->getItem(1); print_r($item); echo "\n\n"; $item->setTitle("blabla bla"); $item2 = &$menu->getItem(1); print_r($item2); echo "\n\n"; |
Dit werkt.
Kan iemand mij misschien vertellen waarom dit zo is. Alle informatie over refenenties binnen php is welkom!
Ik draai (op het moment) PHP Version 4.3.1