7

__call静态调用函数时可以使用魔术方法吗?

4

3 回答 3

15

还没有,据我所知,管道中有一个提议的(现在可用的)__callStaticDocs方法。否则__call,除了对象的实例之外,其他__任何魔术方法都无法使用。

于 2009-01-27T02:43:44.673 回答
9

您必须使用另一种神奇的方法,__callStatic- 这仅在 PHP >= 5.3 中可用,实际上尚未发布。

于 2009-01-27T02:43:37.280 回答
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"));
于 2009-03-28T23:44:54.543 回答