0

看起来不可能做这样的事情:

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 也不起作用。

定义(“方法”,$方法);self::method 不起作用,因为 self 认为是类常量属性。

这个不能用。

有没有办法做到这一点?

4

1 回答 1

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

于 2013-09-16T02:21:40.877 回答