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

環境

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

一覧

  • エルビス演算子は左辺がfalsyな値(※下部参照)の場合に右辺の値を返す。
  • 型まで厳密に比較(===)すれば下記のややこしさは基本解消される。
調べる値if($var)issetemptyis_nullnull 合体演算子
$var ?? “”
(issetと同じ)
エルビス演算子(三項演算子)

$var ?: “”

空文字

$var=””;

falsetruetruefalsetrue false(右辺を返す)
0という文字

$var=”0″;

falsetruetruefalsetruefalse(右辺を返す)
0という数値

$var=0;

falsetruetruefalsetruefalse(右辺を返す)
null

$var=NULL;

falsefalsetruetruefalsefalse(右辺を返す)
未代入の変数(Undefined)
※変数に対して、unsetした場合も同様$var
falsefalsetruetruefalseエラー

PHP Warning: Undefined variable $var

空配列

$var=[]

falsetruetruefalsetruefalse(右辺を返す)

PHPにおけるfalsyな値

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

PHP: PHP 型の比較表 - Manual
内容
FALSEFALSE プリミティブ値
0数値の0
“”空文字
“0”文字列の”0″
[]空配列
nullnull プリミティブ値

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

?>

以上です。

コメント

タイトルとURLをコピーしました