(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