読者です 読者をやめる 読者になる 読者になる

なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

issetってそんなに使うタイミングないようなという話

PHP 技術系

会社の横のお方がよくお釣りの小銭を貯金箱に貯めていて、どれくらいあるのかなと思い人のお金を数えていたら、 後ろのほうで「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を使っていません、という小話でした。

江の島がめっちゃよいという話

たのしい。