在php中从这里阅读
http://docs.php.net/manual/en/migration54.new-features.php
它说,
已添加实例化的类成员访问权限,例如(新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
答案 0 :(得分:1)
您没有遵循文档中的语法。
new ($router->controller())->$router->method();
与
不同 (new $router->controller())->$router->method();
在第一个实例中,您尝试对new
的结果执行method()
,但是第二个实例从controller()
的结果创建一个新对象,然后调用它的方法。
即使这样$router
也不会成为控制器的属性,您需要先评估$router->method()
,然后将其用作方法名称。
我怀疑你真正想要的是
(new $router->controller())->{$router->method()}();