Masayan tech blog.

  1. ブログ記事一覧>
  2. PHPにおけるisset、emptyなどの挙動の違いまとめ

PHPにおけるisset、emptyなどの挙動の違いまとめ

公開日

環境

  • windows10
  • DockerDesktop for Win 3.5.x
  • PHP 8.x

一覧

  • エルビス演算子は左辺がfalsyな値(※下部参照)の場合に右辺の値を返す。
  • 型まで厳密に比較(===)すれば下記のややこしさは基本解消される。

調べる値

if($var)

isset

empty

is_null

null 合体演算子
$var ?? ""
(issetと同じ)

エルビス演算子(三項演算子)

$var ?: ""

空文字

$var="";

false

true

true

false

true

 false(右辺を返す)

0という文字

$var="0";

false

true

true

false

true

false(右辺を返す)

0という数値

$var=0;

false

true

true

false

true

false(右辺を返す)

null

$var=NULL;

false

false

true

true

false

false(右辺を返す)

未代入の変数(Undefined)
※変数に対して、unsetした場合も同様$var

false

false

true

true

false

エラー

PHP Warning: Undefined variable $var

空配列

$var=[]

false

true

true

false

true

false(右辺を返す)

PHPにおけるfalsyな値

条件式として使われる場合(= boolean 型への変換をした場合)にfalseと同等の値と判定されるものはfalsyな値と呼ばれています

https://www.php.net/manual/ja/types.comparisons.php

内容

FALSE

FALSE プリミティブ値

0

数値の0

""

空文字

"0"

文字列の"0"

[]

空配列

null

null プリミティブ値

Null安全オペレータ(?->)

PHP8.0から導入されたNull安全オペレータを使用することで、より簡潔にnullチェックをしたうえで値を取り出すことが可能です。

例えば、以下のような乗り物クラスのオブジェクトがnullであるにもかかわらず、プロパティであるnameを取り出そうとすると、PHP Fatal error: Uncaught Error: Call to a member function name() on null in・・・が生じます

<?php

class Vehicle
{
  private string $name;
  private string $type;

public function __construct(string $name, ?string $type=null)
{
  ....割愛
?>

<?php

$vehicle = null;
echo($vehicle->name());

?>

上記を以下のように記述すると、nullチェックをしたうえでプロパティ等を呼び出すことが可能になり、エラーが生じません。また、name()->hoge()->・・・のようにチェーンすることも可能であり、チェーンの結果がnullの場合は最終的な値としてnullが返ります。

<?php

$vehicle = null;
echo($vehicle?->name()); // NULL

?>

以上です。

まとめ

いかがでしたでしょうか。本記事では、忘れがちなPHPにおけるisset、emptyなどの挙動の違いについて一覧形式で紹介しています。また、falsyな値の区別とそれを判定するための関数の挙動の理解は、簡潔なプログラムを記述する上で必須の知識となりますので、ぜひ試してみてください。