Использование __call со статическими классами? - PullRequest
7 голосов
/ 27 января 2009

Можно ли использовать магический метод __call при статическом вызове функций?

Ответы [ 3 ]

15 голосов
/ 27 января 2009

Пока нет, есть предложенный (теперь доступный) __callStatic Документы метод в конвейере, который я знал в последний раз. В противном случае __call и другие __ магические методы не доступны для использования никому, кроме экземпляра объекта.

8 голосов
/ 27 января 2009

Вы должны использовать другой магический метод , __callStatic - это доступно только в PHP> = 5.3, который еще не был выпущен.

0 голосов
/ 29 марта 2009

Как описано ранее, нет волшебной статической звонилки. Но вы можете кодировать так:

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