phpのisset()関数のドキュメントにあったisset_or()というユーティリティが地味便利なので紹介します。
なんとかしたいやつ
phpではよく isset() と三項演算子の組み合わせよく使いますよね。
こういうのです。
$result = (isset($a['super_long_assoc_array_key'])) ? $a['super_long_assoc_array_key'] : null;
これの気持ち悪いところは2回同じことを書かなければならないところ。
なんとかしてくれるやつ
これがドキュメントのノートに投稿されていたisset_or()です。上記のなんとかしたいやつをなんとかしてくれます。
function isset_or(&$check, $alternate = NULL)
{
return (isset($check)) ? $check : $alternate;
}
// Example usage:
$first_name = isset_or($_POST['first_name'], "Empty");
$total = isset_or($row['total'], 0);
さきほどの例をこれで直すと
$result = isset_or($a['super_long_assoc_array_key']);
うん。すっきり。
php7
なおphp7からは??演算子を使えば良いそうで。
余談
関数のパラメータをリファレンスで渡した場合、連想配列の評価を後回しにできるんですね。(isset_orの第一引数)
これ知らなかったので、自分でこのユーティリティを思いつくことがなかった。しっかり言語仕様を理解することの大事さを教えてくれますね。
コメントで教えてもらいましたが、リファレンスを使うとその時点で変数が存在しない(Undefined)場合には中身がnullの変数が作成されるそうです。
つまり、isset_or($a['key'])をすると、もしキーがなくてもその瞬間に['key' => null]が追加されます。
後続の処理でarray_key_exists()などによる判定がある場合は注意が必要です。
参考