2013-09-16 2 views
0

Looks как невозможно сделать что-то подобное:Есть ли способ выполнить это с помощью PHP? Статические методы

class Service 
{ 
    public function get($argument1, $argument2) 
    { 
     echo "Arguments: $argument1, $argument2."; 
    } 
} 

class Main 
{ 
    public function __callStatic($method, $arguments) 
    { 
     $method = "get".ucfirst($method); 
     $arguments = implode(", ", $arguments); 

     $object = self::$method; 

     return $object->get($arguments); 
    } 

    public static function getService() 
    { 
     return new Service; 
    } 
} 

$main = new Main; 
$main::Service("1", "2"); // Should output 'Arguments: 1, 2.' 

Проблема заключается самость беспорядок Everthing, с это будет возможно.

Используйте самостоятельно :: $ переменная, само это мы имеем переменную в главном контексте.

объект $ = само не работает тоже.

объект $ = клон само «не работа тоже.

определяет ("метод", $ метод); self :: method не будет работать, потому что сам думает, что это свойство константы класса.

это не может быть использован.

Есть ли способ выполнить это?

ответ

2

Просто передайте оригинал $arguments непосредственно call_user_func_array:

return call_user_func_array(array($object, "get"), $arguments); 

Тогда просто сделать статический вызов Main:

Main::service("1", "2"); 

посмотреть здесь в действии: http://codepad.viper-7.com/phhqy6

+0

Джозеф, похоже, очень интересное решение. Но я еще не понял этого до конца. Не могли бы вы написать для меня все * __callStatic *? Мне интересно, как я могу использовать * $ object *, как вы писали, если основная проблема заключается в том, что я не могу получить объект с помощью оператора * $ object = self :: $ method; *. – GarouDan

+0

@GarouDan - Вы должны называть его '$ object = self :: $ method()': http://codepad.viper-7.com/phhqy6 –

Смежные вопросы