2012-07-24 173 views
0

在PHP從這裏從相同的類屬性語法中調用類方法? 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 

回答

1

您未遵循文檔中的語法。

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

是不是你想上的method()結果進行new一樣

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

在第一個實例,但二審根據結果創建一個新的對象controller()然後調用它的方法。

即使$router不會是控制器的屬性,您需要先評估$router->method(),然後將其用作方法名稱。

我懷疑你真正想要的是

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

+0

謝謝我想要的東西是非常接近你說的這是,'(新$這個 - >控制器()) - > {$此 - >方法}();',接受我可以的時候,是一個非常簡單的錯誤,讓我難倒了大約半個小時,編程的喜悅:p – Griff 2012-07-24 07:00:46

+0

有沒有關於使用大括號的文檔,我從來沒有看過之前完成,並希望閱讀它? – Griff 2012-07-24 07:02:02

+1

@Griff確保它隱藏在變量解析下的[String documentation](http://php.net/manual/en/language.types.string.php)中。 – Leigh 2012-07-24 07:04:44

相關問題