1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP における null と "" と 0 の振る舞い比較

Posted at

はじめに

PHP では、null(値がない状態)・空文字列("")・数値の 0 はいずれも「Falsy(偽とみなされる)」値ですが、式や関数での扱いには微妙な違いがあります。それぞれの扱いについて、ふわっととした理解でいる気がしたので、本記事では以下の観点から比較・検証・整理してみようと思います!

PHPのバージョン

PHP 8.4.3

今回とりあげる挙動

  1. if 文での評価
  2. isset での判定
  3. 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 合体演算子
以上を意識していくといいのかもしれません!!
信じるか信じないかは、あなた次第です!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?