個人的には、PHPの変数の有無を判定する構文設計が失敗していると感じています。分業が曖昧で境界が曖昧で、判定に抜け穴が残りやすいです。嫌いです。このように機能がたくさんあるように見えて曖昧な設計ですが、これは PHP が弱い型付け言語であることに起因するものではなく、実装者の問題です。今日は楽しいものをいくつか紹介します。
#isset
変数が設定されているか、null ではないかを確認します。isset ( mixed $var , mixed $... = ? ) : bool
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(isset($a)); // false var_dump(isset($b)); // true var_dump(isset($c)); // true var_dump(isset($c['name'])); // false var_dump(isset($d)); // false var_dump(isset($a, $b, $c, $d)); // false // var_dump(isset("abc")); // 语法错误 // var_dump(isset(tt())); // 语法错误 // var_dump(isset(MY_CONST)); // 语法错误オブジェクトのオブジェクトを確認するために安全に使用できる変数
// instead of writing isset($abc) && isset($abc->def) && isset($abc->def->ghi); // or in a shorter form isset($abc, $abc->def, $abc->def->ghi); // you can just write isset ($abc->def->ghi);
empty()
変数かどうかを判断する存在するか空です。empty ( mixed $var ) : bool
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(empty($a)); // true var_dump(empty($b)); // true var_dump(empty($c)); // true var_dump(empty($c['name'])); // true var_dump(empty($d)); // true var_dump(empty("abc")); // false var_dump(empty(tt())); // true // var_dump(empty(MY_CONST)); // 语法错误#!
空かどうかを確認します。未定義の変数は PHP 通知を報告しますが、構文エラーは報告せず、プログラムは終了しません。
<?php function tt() { } $a = null; $b = 0; $c = []; var_dump(!$a); // true var_dump(!$b); // true var_dump(!$c); // true var_dump(!$c['name']); // true PHP Notice: Undefined index: name var_dump(!$d); // true PHP Notice: Undefined index: name var_dump(!("abc")); // false var_dump(!tt()); // true // var_dump(!MY_CONST); // 语法错误?:
三項演算子の略称。
$c['name'] ?: 10 等价于 !$c['name'] ? 10 : $c['name']
したがって、その判断の基礎は依然として、それが空であるかどうかを判断することです。未定義の変数は PHP 通知を報告しますが、構文エラーは報告せず、プログラムは終了しません。
#??
$a ?? 10 等价于 isset($a) ? $a : 1概要
存在するかどうかを確認します: isset、??
以上がPHP の ?:、??、isset、empty は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。