環境
- windows10
- DockerDesktop for Win 3.5.x
- PHP 8.x
一覧
- エルビス演算子は左辺がfalsyな値(※下部参照)の場合に右辺の値を返す。
- 型まで厳密に比較(===)すれば下記のややこしさは基本解消される。
調べる値 | if($var) | isset | empty | is_null | null 合体演算子 | エルビス演算子(三項演算子) $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) | 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な値の区別とそれを判定するための関数の挙動の理解は、簡潔なプログラムを記述する上で必須の知識となりますので、ぜひ試してみてください。