PHPでnewと同時にメソッドチェーンする方法

最近ようやくPHP5をちょこちょこと触ってるわけなんですが、折角メソッドチェーンサポートされたのに何故かnewと同時にできない罠。

これなんか動いても良さそうなのになぁ。直感的だし。

<?php

(new Foo)->bar();

嘆いてもしょうがない。動かないものは動かないので、ちょこちょこと調べてたらこんなのが

そこで以下のような関数を定義する。

<?php
function ref($obj)
{
    return $obj;
}

この関数はみたとおり渡された値をそのまま返す関数だが、これを使うことで以下のようにメソッドチェーンできるようになる。

<?php
ref(new Hoge)->doSomething();

というバッドノウハウっぽい話。

PHPでコンストラクタからメソッドチェーンする方法 - id:anatooのブログ

やっぱこれくらいしかないよねー。

でも標準関数だけでやりたいのが人情というもの。あれこれ試してみたところ、やっとこさ実現できた。

ってことで僕が出した結論はコレ。

<?php

pos(array(new Foo))->bar();

これがホントのバッドノウハウ

可読性?しったこっちゃねーお!