104
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

エルビス演算子でスマートに変数を初期化

Last updated at Posted at 2015-01-07

なんてことはない。PHP5.3から登場したエルビス演算子を知ったので試してみたというだけ。

注意:コメントによりよい手法が書かれています

背景

三項演算子は可読性を落とすか
を読ませていただきまして、今回の話に至りました。

エルビス演算子とは

a ?: b

と記述すると以下のように実行される。

  • atrue、または真と判断できる値であればその値が返却され、bは評価されない
  • afalse、または偽と判断できる値であれば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'とかで同じことが出来る

綺麗なんですけど、結果として可読性どうなんでしょうか。まあ使いどころを初期化などに限れば良さげではあります。

104
88
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
104
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?