从相同的类属性语法调用类方法? PHP

时间:2012-07-24 06:51:06

标签: php oop

在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

1 个答案:

答案 0 :(得分:1)

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

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

不同

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

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

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

我怀疑你真正想要的是

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