2009-01-27 9 views

Antwort

15

Noch nicht, es gibt eine vorgeschlagene (jetzt verfügbar) __callStaticDocs Methode in der Pipeline zuletzt wusste ich. Ansonsten sind __call und die anderen __ magischen Methoden für nichts anderes als die Instanz eines Objekts verfügbar.

8

Sie müssen die andere magische Methode verwenden, __callStatic - dies ist nur in PHP> = 5.3, die noch nicht freigegeben worden ist.

+0

Import zu beachten, dass noch nicht verfügbar ist. – David

+0

Ah bugger - Ich habe mich gefragt, und fing an, die Frage zu schreiben ... dann fand ich __callStatic, aber ich wusste nicht, dass es nicht verfügbar sein wird bis php 5.3 – nickf

+0

Ich war nicht so aufgeregt für eine "kleine" Veröffentlichung in PHP seit ... Yeah PHP5.3 gibt mir Hoffnung für die Sprache. – David

0

Wie zuvor beschrieben, gibt es keinen magischen statischen Aufrufer. Aber Sie können wie folgt codieren:

class First { 
     public static function test1(){ 
      return 1; 
     } 
     public static function test2(){ 
      return 2; 
     } 
    } 


    class Second { 
     public static function test1(){ 
      if(func_num_args()>0){ 
       return func_get_args(); 
      } 
      return 21; 
     } 
     public static function test2(){ 
      return 22; 
     } 
    } 

    class StaticFactory { 
     public static function factory($class, $method){ 
      if(func_num_args()>2){ 
       $args = func_get_args(); 
       array_shift($args); 
       array_shift($args); 
       return call_user_func_array(array($class,$method), $args); 
      }else{ 
      return call_user_func_array(array($class,$method), array()); 
      } 
     } 
    } 

    print_r(StaticFactory::factory("Second", "test1", 1, false, true)); 

    print_r(StaticFactory::factory("First", "test1")); 
Verwandte Themen