2009-01-27 17 views

Respuesta

15

Aún no, hay un método propuesto (ahora disponible) __callStaticDocs en el último oleoducto que conozco. De lo contrario, __call y los otros __ métodos mágicos no están disponibles para el uso de otra cosa que la instancia de un objeto.

8

Tienes que usar otro método mágico, - esto solo está disponible en PHP> = 5.3, que aún no ha sido lanzado.

+0

Importar para notar que no está disponible todavía. – David

+0

Ah bugger - Me preguntaba sobre esto, y comencé a escribir la pregunta ... entonces encontré __callStatic pero no me di cuenta de que no estaría disponible hasta php 5.3 – nickf

+0

No he estado tan emocionado por un "menor" lanzamiento en PHP desde ... Sí PHP5.3 me da esperanza para el lenguaje. – David

0

Como se describió anteriormente, no existe una llamada mágica estática. Pero puede codificar de esta manera:

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"));