個人的には、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 サイトの他の関連記事を参照してください。