issetってそんなに使うタイミングないようなという話
会社の横のお方がよくお釣りの小銭を貯金箱に貯めていて、どれくらいあるのかなと思い人のお金を数えていたら、 後ろのほうで「issetが辛い」みたいな話が聞こえてきたので、「issetって使うタイミングあんまりないような」って話をしました。
もちろん、まったく使わないみたいな過激派な話ではなくって、こういうときには使わないですね、という程度の話です。
issetを使うよくあるパターンとして、$_GET
のようなスーパーグローバルから値を取得する際にキーの存在を調べるというものがあります。
$foo = $_GET['foo'];
例えばこのように書くと、index.php?foo=bar
のような場合に文字列"bar"
が取れるのですが、クエリストリングが指定されない場合にはE_NOTICE
が発生してしまいます。(存在しない配列のキーへのアクセス)
そこで事前にキーの存在を調べるためにissetを使います。
$foo = isset($_GET['foo']) ? $_GET['foo'] : '';
これは、$_GETにキーfoo
があれば$_GET['foo']
を、なければ空の文字列をセットするというものです。
この使い方が多いため、PHP7からは短縮構文として??
演算子が導入されました。
$foo = $_GET['foo'] ?? '';
これは短くて便利ですが、PHP7以降でしか利用できません。
このような使い方の場合、$_GETの存在しないキーへのアクセスが問題なので、事前にデフォルト値をセットしておけばいいのではと思います。
$params = $_GET + [ 'foo' => '' ]; $foo = $params['foo'];
$_GET
にキーfoo
が存在する場合は単に後ろの配列の値は結合の際に無視されるのでデフォルト値を設定する際に便利です。
こういう使い方をよくするので、このような場合にはisset
を使っていません、という小話でした。
江の島がめっちゃよいという話
江ノ島めっちゃいいよ pic.twitter.com/ShmqnKo7O2
— シリル@ひだまりPHP (@d_cyrill1129) 2016年3月18日
荒れてた海です pic.twitter.com/bboMgSVhgV
— シリル@ひだまりPHP (@d_cyrill1129) 2016年3月18日
後残りの写真ね pic.twitter.com/RlxwPZjeDa
— シリル@ひだまりPHP (@d_cyrill1129) 2016年3月18日
たのしい。