ugrás a tartalomhoz

Template engine funkcionális kérdés

Max Logan · 2008. Jan. 24. (Cs), 13.51
Egy template engine-t csinálok, amiben lehetőség lesz a változó hozzárendeléseknél névterek használatára. A lényege, hogy a változó hozzárendelésnél meg lehet adni egy névtér nevet és ebbe kerülnek bele a változók. Belátható, hogy így több névtérben lehet használni ugyanolyan nevű változókat. (Az egész elgondolás azon alapszik, hogy ne kelljen prefix-elni a változó neveket).

Namost a kérdés az, hogy ezt hogyan oldja meg funkcionális szempontból? Most úgy indultam el, hogy van egy use_namespace attributum, amitől függően másképpen viselkedik pl. az assign() metódus. A kérdés az, hogy legyen így vagy legyen külön metódus a ns használat esetére.

Tehát:
  1. <?php  
  2.   
  3.   # Névtér nélkül  
  4.   $tpl -> assign("var","value");  
  5.   
  6.   $tpl -> display("tpl_file");  
  7.   
  8.   
  9.   # Névtérrel  
  10.   $tpl -> use_namespace = true;  
  11.   
  12.   $tpl -> assign("ns_name","var","value");  
  13.   
  14.   $tpl -> display("ns_name","tpl_file");  
  15.   
  16. ?>  
vagy
  1. <?php  
  2.   
  3.   # Névtér nélkül  
  4.   $tpl -> assign("var","value");  
  5.   
  6.   $tpl -> display("tpl_file");  
  7.   
  8.   
  9.   # Névtérrel  
  10.   $tpl -> ns_assign("ns_name","var","value");  
  11.   
  12.   $tpl -> ns_display("ns_name","tpl_file");  
  13.   
  14. ?>  
 
1

milenneha

winston · 2008. Jan. 24. (Cs), 14.03
mi lenne, ha
  1. $tpl -> assign("var","value""ns_name");    
jellegű lenne az assign-metódusod, ahol az assign-t úgy deklarálod, hogy
  1. assign($key$value$namespace = null)  
így aztán vagy megad névteret, vagy nem, te meg e szerint dolgozod fel.
2

Elvben jó, de ...

Max Logan · 2008. Jan. 24. (Cs), 14.07
... lehetőség van az assign metódusnak csak tömböt átadni, ami tartalmazza a hozzárendeléseket. Ebben az esetben jön a PHP által nem egyszerűen használható változó paraméterlista probléma.

Az első esetben bonyolítja a kódot - a tömb megadhatóság miatt - a hibakezelés.

A ns_* lesz a nyerő, mert ha a ns_* függvényeket használja a rendszer, akkor a megadott névtérbe kerül a változó, ha meg a sima függvényeket, akkor a "globális" névtérbe, míg a másik megoldásnál nem lenne globális névtér. (Jobban mondva, nagyon bonyolult lenne egy-egy metódus kódja, ha lehete globális névteret használni). Ezt a virtuális globális névteret mindenhonnan el lehet érni.

Ui.: s_volenszki gondolatából kiindulva lassan igazolódik, hogy milyen ispiratív a weblabor-on való hangos gondolkodás :-)
3

func_get_args ...

sandornemeth · 2008. Jan. 25. (P), 12.47
.. segithet abban, hogy megvizsgald a parametereket, igy dinamikusan tudod valtoztatni oket, es mind a 3 esetet le tudod konnyen kezelni akar 1 fuggvenyben.
1 param: tomb
2 param: default ns-be megy a var,value paros
3 param: (ns, var, value) 3as
4

Nem rossz megközelítése, de ...

Max Logan · 2008. Jan. 25. (P), 13.06
... mi van, akkor ha ns-be kell tenni a változókat és tömbként adják át? Ekkor is két változó van, ami ugye a fentiek szerint az egy változó hozzárendelés esete a függvénynek átadott paraméterszám alapján. Még így is lekezelhető a dolog, de egy jó dagadt függvényt kapunk, ami elég sok elágazást tartalmaz.