Ik heb een soort DOM gebouwd in php, op zich werkt dit allemaal leuk. Elk object kent zijn kinderen. Die kinderen kennen zijn kinderen ook weer.
De structuur is dus als volgt"
Een masterobject kent dus in principe ook al zijn kleinkinderen, maar via de parentobject.
Ik zou dit graag ook de andere kant op doen, dus dat een childobject via zijn parent ook de masterobject kent. opzich niet zo'n probleem zou je denken.
Nu creer ik het childobject een een functie (beperkte scope) en kopier ik deze in een array in het parentobject. Zoiets:
Er wordt dus geen pointer opgeslagen, maar er wordt een kopie gemaakt. In de AddChildData functie wordt er ook gedaan:
So far so good, als $childObject doodgaat, dan kent ie zijn parent nog wel. Zodra ik hetzelfde trucje uithaal met de parentNode naar de masterNode toe, en de parentNode gaat dood. Dan is de pointer ook verdwenen van de childNode naar de parentNode.
Hierdoor kan ik de parent nooit dieper dan 1 laag opslaan.
Is het mogelijk de data van een pointer voort te laten bestaan zonder een global van te maken, dit zou namelijk een oplossing zijn, maar erg netjes vind ik het niet.
Een andere optie is om de verantwoordelijkheid van de child en parent niet neer te leggen bij de objecten, maar om dit over te dragen aan een secretaris, hierdoor blijven alle objecten bestaan zolang de secretaris bestaan.
Is mijn probleem duidelijk? Hoe lossen jullie dit op?
De structuur is dus als volgt"
code:
1
| | MASTER OBJECT | --> | parentObject | ---> | childObject | |
Een masterobject kent dus in principe ook al zijn kleinkinderen, maar via de parentobject.
Ik zou dit graag ook de andere kant op doen, dus dat een childobject via zijn parent ook de masterobject kent. opzich niet zo'n probleem zou je denken.
Nu creer ik het childobject een een functie (beperkte scope) en kopier ik deze in een array in het parentobject. Zoiets:
PHP:
1
| $parentObject->AddChildData($childObject); |
Er wordt dus geen pointer opgeslagen, maar er wordt een kopie gemaakt. In de AddChildData functie wordt er ook gedaan:
code:
1
2
3
4
| // De array bevat een kopie van $childObject op index 0 // De parent wordt als pointer opgeslagen. $this->_arrChildren[0]->SetParent($this); |
So far so good, als $childObject doodgaat, dan kent ie zijn parent nog wel. Zodra ik hetzelfde trucje uithaal met de parentNode naar de masterNode toe, en de parentNode gaat dood. Dan is de pointer ook verdwenen van de childNode naar de parentNode.
Hierdoor kan ik de parent nooit dieper dan 1 laag opslaan.
Is het mogelijk de data van een pointer voort te laten bestaan zonder een global van te maken, dit zou namelijk een oplossing zijn, maar erg netjes vind ik het niet.
Een andere optie is om de verantwoordelijkheid van de child en parent niet neer te leggen bij de objecten, maar om dit over te dragen aan een secretaris, hierdoor blijven alle objecten bestaan zolang de secretaris bestaan.
Is mijn probleem duidelijk? Hoe lossen jullie dit op?
"Chaos kan niet uit de hand lopen"