0

在 php 中从这里读取

http://docs.php.net/manual/en/migration54.new-features.php

它说,

添加了对实例化的类成员访问,例如 (new Foo)->bar()。

我有一个类并像下面这样调用它的方法(因为我不能做上面所说的!!),

$router = new RouterCore();
$method = $router->method;
$controller = new $router->controller();
$controller->$method();

当类名和方法名都作为另一个类的属性存在时,执行上述操作的语法是什么?我已经尝试过以下内容;

$router = new RouterCore();
new ($router->controller())->$router->method(); // no go
new $router->controller()->$router->method(); // no go
new ($router->controller()->$router->method()); // no go
4

1 回答 1

1

您没有遵循文档中的语法。

new ($router->controller())->$router->method();

不一样

(new $router->controller())->$router->method();

在第一个实例中,您尝试new对 的结果执行method(),但是第二个实例从结果创建一个新对象,controller()然后调用它的方法。

即使这样$router也不会成为控制器的属性,您需要先评估$router->method(),然后将其用作方法名称。

我怀疑你真正想要的是

(new $router->controller())->{$router->method()}();

于 2012-07-24T06:55:24.817 回答