PHPでメソッドチェーン

メソッドチェーンといって、オブジェクトを連ねて処理させる方法がある。

class Hoge {
 function Hoge() {
 }

 public function eh($str) {
  echo htmlspecialchars($str);
 }
}

new Hoge()->eh("この引数が表示される");

※Hoge::eh("この引数が表示される");と書くことも出来るが、今回はメソッドチェーンのお話。

動かすと、「PHP Parse error: parse error, unexpected T_OBJECT_OPERATOR」というエラーが返ってくる。
PHPでは動かない。

これを動かすには、以下のような関数を用意する必要がある。

function expr($f) {
 return $f;
}

この関数を以下のように使うことで、メソッドチェーンを実現することが出来る。

class Hoge {
 function Hoge() {
 }

 public function eh($str) {
  echo htmlspecialchars($str);
 }
}

function expr($f) {
 return $f;
}

expr(new Hoge())->eh("この引数が表示される");

ソースコードがスッキリするので、個人的には好きな書き方です。
でも、Hoge::eh("この引数が表示される");の方が僕は好きです。

参考
http://d.hatena.ne.jp/amachang/20090803/1249292858