2009-01-27 58 views

回答

15

还不知道,现在有一个建议(现在可用)__callStaticDocs方法在最后我知道。否则__call和其他__魔术方法不可用于任何对象的实例。

8

你必须使用其他神奇的方法,__callStatic - 这是只有在PHP> = 5.3,尚未实际发布呢。

+0

导入时需要注意的是不可用。 – David 2009-01-27 02:45:09

0

如前所述,没有神奇的静态调用者。但是你可以这样编码:

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