なんてことはない。PHP5.3から登場したエルビス演算子を知ったので試してみたというだけ。
注意:コメントによりよい手法が書かれています
背景
三項演算子は可読性を落とすか
を読ませていただきまして、今回の話に至りました。
エルビス演算子とは
a ?: b
と記述すると以下のように実行される。
-
a
がtrue
、または真と判断できる値であればその値が返却され、b
は評価されない -
a
がfalse
、または偽と判断できる値であればb
が評価され、返却される
三項演算子の短縮形っぽいけどこんな書き方も出来る模様。
a ?: b ?: c
本題に入る
よく見るアレ
$hoge = 'bar';
if(isset($_POST['foo'])){
$hoge = $_POST['foo'];
}
長い…
CGIでPOST変数がundefinedでなければ変数に代入するというもの。こういうコードはよく見てきたし、今まではこういうものなんだなと思ってたけど、やっぱりどうにかしたかった。
三項演算子ではどうか
$hoge = isset($_POST['foo']) ? $_POST['foo'] : 'bar';
スッキリ!ヤッタネ!
いやでもまだ$_POSTあたりが冗長的な気が…
そこでエルビス演算子ですよ
$hoge = @$_POST['foo'] ?: 'bar'; // Undefined index の Notice を抑止
エ、エレガント!!
まとめ
- エルビス演算子つよい
- でもPHPだけ?
- よくよく考えたらJavaScriptとかでは
var hoge = foo || 'bar'
とかで同じことが出来る
綺麗なんですけど、結果として可読性どうなんでしょうか。まあ使いどころを初期化などに限れば良さげではあります。