三項演算子大好きです。
簡潔に書ける三項演算子。
<?php $params = @$params ?: array();
ときどき、コーディング規約で「三項演算子は禁止」とか言う人いるけど、合理的理由が「読みにくい」じゃ納得出来ない。。。かなしい。
結局はエディタで三項演算子のマクロ展開を書くことになってですね・・・不毛
三項演算子はそれなりに良さがある。
<?php if( !$a ) { $a = 1; }
これを、一行にまとめると読みづらい。
<?php if( !$a ) $a = 1;
if には必ず、ブレイスつけてブロック化しろとかコーディング規約もあったりして。
三項演算子読みやすい
<?php $a = ($a) ? $a : 1;
簡潔にかける三項演算子
なんと、デフォルト値省略できたんですね
<?php $a = 2; $a = ($a) ?: 1; echo $a ; //=> 2
便利ですね
未定義な変数をどうする?
でも未定義な変数を初期化したい時にどうするんだ?
PHP Notice: Undefined variable: a in /Users/takuya/Desktop/test.php on line 5
@ つけちゃえ
これが冒頭のサンプルです。超可読性アップですよね。
<?php $a = @$a ?: 1; echo $a ; //=> 2
OKWAVeやqiita 読んでたら@ つけると「エラー抑制でデバッグが手間、処理遅くなる」とか言う人いた、
でも、この関数呼び出しですらない@に文句は言えないだろう!
でもコレが出来ない
三項演算子を使うとちょっと楽になった、PHPですが、Rubyできてるコレが出来ない。
a = ( ARGV[0] || "default" ) puts a
#!/bin/env ruby a ||= 1 puts a #=> 1
OR比較がTRUE/FALSEなのはなんとかならないですかねぇ。。。
まぁ、出来なくても余り困らないんだけど。
php 7 (5.7)から
<?php $a = @$a ?? 1; echo $a ; //=> 2
が出来たので、undefined or が書けるようになった。
コーディング規約の 気持ち悪さといえば
三項演算子より、DIRECTORY_SEPARATORやPHP_EOLのほうが気持ち悪さ半端ない。
最近はWindowsでもスラッシュをパス名に解釈してくれるだろうに・・・
PHPを書く人に中途半端なのが多くて、無駄にチェック作業や規約が増えてクソって言われているのでは、、、そんな気がするのは私だけ?
関連資料
規約が増えていく好例、適当に書くから規約が多くなって。。。
参考資料
エルビス演算子ってGroovy呼び名なので、PHPでその呼び名を使うのが相応しいかわからなかった。
http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
https://hydrocul.github.io/wiki/programming_languages_diff/etc/elvis.html