【PHP】インスタンス生成とメソッドの実行をファサードっぽく1行で記述する方法

徒然草2.0

Qiitaとかでわざわざコメントを書くほどのことではないと思うのですが(ただの揚げ足取りだと思われる気がします…ま本人はそうは思っていないのですが)Laravelに出てくるファサードの利点について「ClassとMethodを1行で書けること!」と言っているひとがいたのですが…だったら、インスタンス生成と同時にMethodを実行することもできるよなー(普通やらないけど)と思ってやってみたら、できました。PHP7系で動きます↓

$ php -a
php > class MainClass{ function getMethod($param){ return "test"; } }
php > echo $val = (New MainClass())->getMethod(1);
test

ようはnewしたインスタンスをカッコで囲ってアロー演算子を生やすだけ。

上記の欠点は通常のオブジェクトが異なったほうがいい場合にしか使えないということ、また都度インスタンスを破棄→生成してしまうということ。(これは欠点でしかないか。1回限りにしか使えない)Laravelのファサードは基本的にオブジェクトを破棄しないで使用するような気がする。ファサード本体のオブジェクトが、同一であっていい時に使用するんだと思っています。ファサードの仕様のしかたはそこまで厳密に決まっていない気がしています(知らないだけかもしれない)状態を持つファサードでそれを初期化するMethodがない時はどうすればいいのか?となったことがあります。いずれにしてもファサードをあまり便利だと思わないですね。オブジェクトを都度Newしまくっているソースコードもどうかと思うわけで、じゃあどうするのが最適であるかと言われると難しいですが。Quoraに状態をオブジェクトに持たせるべきではないと言っていた人がいました。関数型言語はそのたぐいのものかもしれません。何がベストなんだろう?これを言ってしまえば議論はおしまいですがケースバイケースな気もします。

徒然草2.0
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました