はじめに
PHP では、null(値がない状態)・空文字列("")・数値の 0 はいずれも「Falsy(偽とみなされる)」値ですが、式や関数での扱いには微妙な違いがあります。それぞれの扱いについて、ふわっととした理解でいる気がしたので、本記事では以下の観点から比較・検証・整理してみようと思います!
PHPのバージョン
PHP 8.4.3
今回とりあげる挙動
- if 文での評価
- isset での判定
- Null 合体演算子 (??)
値の定義
値 | 型 | 内容 |
---|---|---|
null |
NULL |
値が存在しない状態 |
"" |
string |
長さ 0 の文字列 |
0 |
int |
数値のゼロ |
1. if 文での評価
php > $values = [null, "", 0];
php > foreach ($values as $v) {
php { if ($v) {
php { echo "truthy";
php { } else {
php { echo "falsy";
php { }
php { }
falsyfalsyfalsy
null, "", 0 はすべて falsy と判定される。
2. isset での判定
php > $values = [null, "", 0];
php > foreach ($values as $v) {
php { if (isset($v)) {
php { echo "truthy";
php { } else {
php { echo "falsy";
php { }
php { }
falsytruthytruthy
isset は
変数が定義されていてかつ null 以外 のときに true を返す。
3. Null 合体演算子 (??)
// nullの場合
php > $var = null;
php > echo $var ?? 'default';
default //右辺を返す
// 空文字の場合
php > $var2 = "";
php > echo $var2 ?? 'default';
// 空だけど左辺を返す
// 0の場合
php > $var3 = 0;
php > echo $var3 ?? 'default';
0 //左辺を返す
?? は 左辺が
- null のときのみ 右辺を返す
- 空文字列や 0 は null ではないため、左辺が返る
まとめと使い分け
判定/演算子 | null |
"" |
0 |
---|---|---|---|
if ($v) |
falsy | falsy | falsy |
isset($v) |
false | true | true |
$v ?? 'default' |
default | "" |
0 |
真偽判定 には if 文を使う
存在確認 には isset を、
デフォルト設定 には Null 合体演算子
以上を意識していくといいのかもしれません!!
信じるか信じないかは、あなた次第です!