勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPにて三項演算子をより簡単に書けるNull合体演算子について

  PHP

PHPにて〇〇という変数もしくは配列に値があれば××という変数にその値を格納、無ければ別途指定した値を格納したいというよくあるケースでいつもだと三項演算子を利用していたが、さらに簡潔に書けるNull合体演算子というのがPHP7系から追加されていたのを最近知った。以下に利用方法をメモ。

 

利用方法

ソースコード

//三項演算子
$param = ( isset($_GET['param']) ) ? $_GET['param'] : 'no param';

//Null合体演算子
$param = $_GET['param'] ?? 'no param';

尚、Null合体演算子を連結して以下のように記述することでGET -> POST -> いずれも存在しない場合はno paramを指定するような形も可能。

$param = $_GET['param'] ?? $_POST['param'] ?? 'no param';

また、$_GETや$_POSTではなく通常の変数でも問題無く使える。

注意点

変数や配列が未定義の場合やNULLの場合は問題無いが空の場合は左辺が有効になる点に注意。

例として以下を記述したtest.phpというファイルをアップロードしたとする。

$param = $_GET['param'] ?? 'no param';

「https://test.com/test.php」でアクセスすると右辺の「no param」が有効となるが「https://test.com/test.php?param=」だと空扱いのため左辺が有効となり「$param = '';」という状況になる。

特にGET送信時にNull合体演算子を使うような場合は注意した方が良さそう。

尚、その他の気になりそうなケースはこちらの記事が参考になった。

 

リファレンス

https://www.php.net/manual/ja/migration70.new-features.php#migration70.new-features.null-coalesce-op

 

所感

「??」という演算子が慣れるまで微妙に感じそうだけど、かなり簡潔に書けるようなので今後使っていきたいところ。

ちなみにJavaScriptでもNull合体演算子があるものの、こちらは左辺が未定義変数の場合は「〇〇 is not defined」とエラーになり、PHPと同じ感覚では使えなさそうということでちょっと微妙かも。

 - PHP

  関連記事

【2024年版】PHPMailerでGmailのSMTPサーバを経由してメールを送信する方法

だいぶ前に同じようなことをメモしたが、そちらの方法だと送信できずエラー内容を見た ...

PHPにて指定した期間内の日付を1日ずつループで出力する方法

PHPにて開始日と終了日をユーザが入力すると、その期間内の日付をYYYY-MM- ...

PHPでステータスコードを取得する方法

サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視して ...

CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法

以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...

HTML / CSSで作成したコンテンツをPDFファイルで出力する方法(TCPDF)

HTML / CSSで作成したコンテンツをPDFファイルで出力させたい。以前mp ...