有没有办法用PHP执行此操作?静态方法

时间:2013-09-16 02:19:05

标签: php class methods static self

看起来不可能做类似的事情:

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是一个类常量属性。

无法使用。

有没有办法执行此操作?

1 个答案:

答案 0 :(得分:2)

将原始$arguments直接传递给call_user_func_array

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

然后,只需对Main进行静态调用:

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

在此处查看:[{3}}