2015年6月18日木曜日

PHPまとめ1:エルビス演算子

/*━━━━━━━━━━━━━━■PHP■━━━━━━━━━━━━━━*/
○エルビス演算子
$c = $a ?: $b;

○三項演算子の場合
$c = $a ? $a : $b;


/*━━━━━━━━━━━━━━■JavaScript■━━━━━━━━━━━━━━*/
c = a || b;

・補足
JavaScriptでは、論理演算子&& ||の比較対象としてBoolean以外の値を指定した場合、その値をBooleanに変換せず返します。
よってJavaScriptでは論理演算子||をエルビス演算子の代わりとして用いることが出来ます。

論理演算子&& ||がBoolean以外の値を返すのはJavaScriptに限った話ではありません。
他のプログラミング言語でもこのような実装になっている言語が存在します。
よってこの記事で紹介したテクニック(と呼べるほどの事かは疑問ですが)はJavaScript以外の言語でも利用できます。


/*━━━━━━━━━━━━━━■PHP7で2項演算子「??」が新設■━━━━━━━━━━━━━━*/

オペランドがnull以外の値であればその値を、そうでなければ右オペランドを返す
var_dump(null ?? false ?? true); // false

これはPHP 5.3で導入されたエルビス演算子「?:」と少し似ています。
エルビス演算子は真偽の判断
??演算子はnullかどうかの判断を行う点が異なる

var_dump(null ?: false ?: true); // true

それだけでなく、??演算子はisset()と同様に未定義値をチェックしてもエラーになりません。
これは非常に大きな違いで、??演算子があれば今までのisset()地獄から解放されるかもしれません。

var_dump($arr["foo"] ?: "bar"); // 未定義だとUndefined variableかUndefined indexで怒られちゃう
var_dump(isset($arr["foo"]) ? $arr["foo"] : "bar"); // 結局こう書いてたよね…
var_dump($arr["foo"] ?? "bar"); // PHP7ではこれで動く!

PHP7調査(11)??演算子の新設
JavaScriptではエルビス演算子を論理演算子で代用できる
エルビス演算子でスマートに変数を初期化

0 件のコメント:

コメントを投稿