看起来不可能做类似的事情:
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.'
问题在于自我混乱,这是可能的。
使用self :: $ variable,self我们在Main上下文中有一个变量。
$ object = self也不起作用。
$ object = clone self dont'也不行。
define(“method”,$ method); self :: method不起作用,因为self think是一个类常量属性。
此无法使用。
有没有办法执行此操作?
答案 0 :(得分:2)
将原始$arguments
直接传递给call_user_func_array
:
return call_user_func_array(array($object, "get"), $arguments);
然后,只需对Main
进行静态调用:
Main::service("1", "2");
在此处查看:[{3}}