メンバー関数 f() を持つクラス A が与えられた場合、次の明らかに妥当なコード:
( new A() )->f();
構文エラー「unexpected T_OBJECT_OPERATOR」で失敗します。
これについての説明はありますか?
編集:Mageek が推測したように、私はこの動作を理解しようとしています。私はすでにそれを回避する方法を知っています。
メンバー関数 f() を持つクラス A が与えられた場合、次の明らかに妥当なコード:
( new A() )->f();
構文エラー「unexpected T_OBJECT_OPERATOR」で失敗します。
これについての説明はありますか?
編集:Mageek が推測したように、私はこの動作を理解しようとしています。私はすでにそれを回避する方法を知っています。
これは PHP 5.4 以降でのみ利用可能です。それまでは、インスタンスを変数に割り当てて使用する必要があります。
参照: http://www.php.net/manual/en/migration54.new-features.php
ご要望の機能は PHP 5.4 から利用可能です。PHP 5.4 の新機能のリストは次のとおりです。
http://docs.php.net/manual/en/migration54.new-features.php
(new Foo)->bar() など、インスタンス化時のクラス メンバー アクセスが追加されました。
しかし、このトリックを試すことができます:
class TestClass {
protected $_testvar;
public function __construct($param) {
$this->_testvar = $param;
}
public function testMethod() {
return $this->_testvar;
}
}
function TestClass($param) { return new TestClass($param); }
これで、次のように記述できます。
$a = TestClass(2)->testMethod();