Properties beschikbaar bij publieke aanroep in parent class ?
stel;
Hoe kan ik vanuit class A, property "iets" aanspreken ?
Ik heb al gespeeld met een static declaratie en een publieke, maar het mocht niet baten.
-als het mogelijk is- hoe ?
-en er zijn meerdere mogelijkheden- wat is de beste keuze en waarom ?
Groet,
Twan van der Poel
punt de
De uiteindelijke bedoeling is dat er 1 datamodel class komt die huis-tuin en keuken database-mutaties doorvoert.
stel class A is Datamodel en class B is b.v. menuitem
dan heeft class menuitem een variabel $tabel en $pri_key.
Vervolgens wil ik een publieke getAll() functie kunnen aanroepen in de datamodel class.
Dus als menuitem non-generieke query's nodig heeft defineer ik in class Menuitem
public function getAll(){
# doe specifieke. dingen geef terug
}
MAar als het een normale alles ophaal actie is, laat ik de functie achterwege en doe ik alsnog $items = Menuitem::getAll();
Deze wordt vervolgens aangeroepen in de Datamodel class.
maar die getAll() functie in de Datamodel class heeft wel de properties tabel en pri_key nodig van de class Menuitem;
Grt,
-----------------------------------------------------
even een edit om het weer onder de aandacht te brengen;
-----------------------------------------------------
de vraag is dus netto;
als ik B:getAll(); uitvoer, hoe kan ik dan in class A de property "iets" aanspreken
Gewijzigd op 01/01/1970 01:00:00 door Toine vd P
Iemand suggesties ?
....
Op die manier zou je zelfs helemaal geen properties hoeven te declareren maar zou je intern een array kunnen gebruiken.
Het betreft hier een statische aanroep op de class B, als we dus iets toekennen aan B met b.v. magic method __set kunnen we helaas niet de child-class aanspreken of interne waarden van B aanspreken.
Vanaf PHP 5.3.0 kunnen we gebruik maken van Late static bindings -wat de oplossing zou bieden- echter kan ik geen debian package vinden hiervoor. (of de package is van een obscure website)
fyi; @see http://nl3.php.net/manual/en/language.oop5.late-static-bindings.php
kun je jouw post uitwerken tot een klein voorbeeld conform de code in mijn 1e post ?
Helaas, een echte oplossing weet ik niet. Wat je zou kunnen doen is geen gebruik van static maken, het is minder netjes/mooi, maar werkt wel.
Helaas vind ik eerst een instance maken -zoals je zelf aangeeft- een workarround en geen oplossing. Het zou mij ook vreselijk veel tijd kosten om dit allemaal aan te passen. Daarnaast zou de opzet juist rapid core development moeten realiseren.
Heeft iemand nog suggesties? alles is welkom.