Php- függvény hívása a megadott kontextusban
Sziasztok!
Egy függvényt szeretnék meghívni egy objektum kontextusában, vagy átadni neki másik kontextusból adatot.
(kontextus=scope, jobb fordítást nem találtam)
Egyelőre az egyedüli működő megoldás a $GLOBALS használata, ill. php4 alatt létezik olyan, hogy aggregate, viszont nekem php5-ös megoldásra van szükségem.
Tud valaki ilyet?
■ Egy függvényt szeretnék meghívni egy objektum kontextusában, vagy átadni neki másik kontextusból adatot.
(kontextus=scope, jobb fordítást nem találtam)
Egyelőre az egyedüli működő megoldás a $GLOBALS használata, ill. php4 alatt létezik olyan, hogy aggregate, viszont nekem php5-ös megoldásra van szükségem.
Tud valaki ilyet?
Ideiglenes
Példa
tudnál példát Írni, nem egészen értem. Biztosan van megoldás vagy design pattern erre, pl observer, ha jól gondolom, mit szeretnél.
Huhh
Javascriptben leírva kb ennyit szeretnék megcsinálni phpben:
Elnézést a stringes, összeadogatós gányolásért, igazából az a rész külön fájlban van php-ben, az az, amit a Compiler kidob, mint php kódot.
Ha nem érthető a dolog, akkor csak szólj, aztán megpróbálom elmagyarázni. :-D
Vázlatosan a lényeg, hogy van egy kódom, amit eval-al meghívok úgy, hogy a Template egy példányának a scope-jában van. Tehát a "this" az a Template egy példánya lesz, aminek már a this.adat változója tárol a adatokat. A kód egy része egy külső osztály: Tree példányosításával foglalkozik. A Tree-nek át kell adni a példányosításnál adatokat, majd a megjelenítéshez a kódban megadott függvényeket. A megjelenítéshez megadott függvényeknek a Template példányának a scope-jában kell futniuk, hogy azok is tudjanak elérni adatokat a this.adat-ból.
Azért van szükség erre a szerkezetre, mert a Compiler minden változó elérést this.adat['változó']-ra fordít le. Szóval ezzel sajnos nem lehet variálni. Nem akarom elmagyarázni, hogy miért nem, mert nagyon bonyolult, a lényeg, hogy a this.adat-ot nem lehet átírni a fordítóban, a fordítón kívül pedig nem szeretném átírni, mert az szintén bonyolult (bár kevésbbé, mint az előző), és gányolás.
Php-ban úgy oldottam meg, hogy létrehozok egy összekötő osztályt, aminek a függvényei lettek a showTree, showBranch, showLetter, a nevét meg a sablonban kell megadni. Az összekötő osztálynál a __get,__set és __call át lett írva, hogy a Template példányra hivatkozzon. Eztán csináltam egy példányt ebből az osztályból, amit szépen átadtam a Tree-nek, és ő nagy kegyesen meghívta a megjelenítő függvényeket rajta. Ami ebben a megoldásban zavaró, hogy minden ilyen külső feldolgozónál egy-egy új osztályt kell létrehoznom. Szal ahányszor meg akarom hívni a Tree megjelenítés részét, annyiszor kell új osztályt létrehoznom. Hálistennek nincs olyan sok külső dolog, viszont ez az egy hívás - egy osztály dolog nagyon zavar. Ezért próbáltam keresni valami megoldást a témára, de sajnos eddig még nem találtam. Php4-ben van olyan, hogy aggregate, az talán segítene, de php5-ben nem lehet használni.
Scope
Hatókör.
Kösz.