PHPではnew に続けてメソッドを実行できない。かなしみ。
class Say {
private $name = 'hoge';
public function hello () {
echo "hello {$this->name}";
}
}
$say = new Say()->hello();
// Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)
//めんどい
$say = new Say();
$say->hello();
自分自身のインスタンスを返す静的メソッドを用意しておくとそれに続けてチェーンできる。
class Say2 {
private $name = 'hoge';
public static function forge() {
return new static;
}
public function hello () {
echo "hello {$this->name}";
}
}
Say2::forge()->hello();
ちなみにnew クラス名
をカッコで囲ってもチェーンできる。
(new Say())->hello();
// hello hoge