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

<?php
class Service1_AMF
{
   private function _rutin1( $param1 )
   {
      
   }

   public function __call($name, $arguments)
   {
      //@TODO fugvenynev ellenorzes es parameterszam ellenorzes (ez plusz hibahoz vezethet)
      $fname = '_' . $name;
      switch( $name )
      {
         case 'rutin1': 
           $this->$fname($arguments[0]);
           break;
   }
}
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