(new Foo)->bar();
id:rskyさんのエントリをみて。
http://d.hatena.ne.jp/rsky/20080216/1203168441
なんとかパッチなしで下のように書きたいのだけれどなかなか思い浮かばない。
<?php class Foo { function bar() { echo 'bar'; } } (new Foo)->bar();
以下試行錯誤の例。
Parse error その1 (castしてみました)
<?php ((obj)(new Foo))->bar(); // Parse error: syntax error, unexpected T_OBJECT_OPERATOR
Parse error その2 (evalしてみました)
<?php (eval('return new Foo;'))->bar(); // Parse error: syntax error, unexpected T_OBJECT_OPERATOR
どうも言語構造(?)でオブジェクトを返そうとしてもParser errorになるらしい。
関数で返さないと駄目っぽい。
ユーザ定義関数じゃなくて組み込み関数でやりたい。。。
<?php function hoge($var) {return $var;} hoge(new Foo))->bar(); // bar
str_replace()ってマッチしなかったら文字列そのまま返るよな。。。怒られました。
<?php str_replace('', '', new Foo)->bar(); // Catchable fatal error: Object of class Test could not be converted to string!
一応通るんだけどこんなのやだ。。。
<?php unserialize(serialize(new Foo))->bar(); // bar