ugrás a tartalomhoz

__call vs minden rutinban ellenőrzés

carstepPCE · 2010. Ápr. 9. (P), 09.57
Üdv,

van a Zend Framework -nek egy AMF (Flash/Flex) kezelő rutingyűjteménye, amelyben egy osztályt lehet regisztrálni és az AMF hívások ezen osztály rutinjait hívja meg a megfelelő paraméterekkel. Namost eddig nincs is gond, működik tökéletesen, de szerettem volna minden egyes osztály minden funkcióját kiegészíteni egy kóddal, amely figyeli, hogy még él e a session. / Ezek a rutinok mind publikusak, ami egyértelmű /

Ennek a session figyelő rutinnak a meghívásán gondolkodtam el. Elég macerás és hibához vezethet az a módszer, hogy minden rutin első sorában meghívjam a session tesztelő rutint. Erre gondoltam én, hogy mi lenne ha ezeket a rutinokat átnevezném / prefix / és private-ra állítom és kihasználnám a __call és switch php elemeket.

valahogy így képzeltem
  1. <?php  
  2. class Service1_AMF  
  3. {  
  4.    private function _rutin1( $param1 )  
  5.    {  
  6.         
  7.    }  
  8.   
  9.    public function __call($name$arguments)  
  10.    {  
  11.       //@TODO fugvenynev ellenorzes es parameterszam ellenorzes (ez plusz hibahoz vezethet)  
  12.       $fname = '_' . $name;  
  13.       switch$name )  
  14.       {  
  15.          case 'rutin1':   
  16.            $this->$fname($arguments[0]);  
  17.            break;  
  18.    }  
  19. }  
Szerintetek ez járható út vagy esetleg van más megoldás, amire eddig nem gondoltam?
Hogyan alakulhat a teljesítmény _call esetén, ha van ebben tapasztalatotok?
Mire kell még ügyelni, amire nem gondoltam eddig?

Üdv
Sanyi
 
1

Konstruktor?

Emul · 2010. Ápr. 9. (P), 11.11
Ezt a magic call-os megoldast tobbek kozott azert nem szeretem mert megoli a codecompletiont.
Ugyan nem ertek a Zend AMF-es bizbaszahoz, de ahogy latom itt nem statikus metodusokrol van szo, ergo peldanyositja azt az osztalyt(legalabbis remelem hogy nem hanyja magabol a stricteket). Azaz ezt a session ellenorzest siman megcsinalhatod konstruktorbol is ha jol ertem a problemadat.
2

...

carstepPCE · 2010. Ápr. 9. (P), 11.18
-> igen, nem statikus metódusokról van szó

-> igen, nekem is ez volt az első gondolatom (persze ki is próbáltam anno), de a konstruktorban - példányosításkor - sajnos még nem kezeli a kimenetet az AMF-s osztály, így csak a függvényben magában tudom megnézni.

Üdv
Sanyi
3

Lassú

N0r3i · 2010. Ápr. 9. (P), 18.25
Szia!

Az biztos, hogy a __call lényegesen lassabb, mint a sima hívás, de ha nem ez a szűk keresztmetszet, akkor akár apró áldozatnak is tekintheted a jó ügy érdekében :-)

A switch-et meg kiválthatod egy is_callable() hívással.

Ennél jobb ötletem nekem sincs a probléma megoldására...

Üdv: Norbi
4

...

carstepPCE · 2010. Ápr. 10. (Szo), 17.33
Az is_callable() függvénnyel az a gond, hogy nem szabályozható vele a paraméterek száma, tehát a switch szerintem marad :)

Üdv
Sanyi