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()、2 番目のインスタンスは の結果から新しいオブジェクトを作成し、そのcontroller()メソッドを呼び出します。

それでも$routerコントローラーのプロパティにはなりません$router->method()。最初に評価してから、それをメソッド名として使用する必要があります。

あなたが実際に望んでいるのは

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

于 2012-07-24T06:55:24.817 に答える