Personally, I feel that the grammatical design for judging whether a variable exists or is empty in PHP is a failure. The division of labor is unclear and the boundaries are unclear. It is easy to leave loopholes in the judgment. I hate this kind of design that seems to have many functions but is vague. , this cannot be attributed to PHP being a weakly typed language, but a problem of the implementer. Today I will introduce some fun things.
isset
Check whether the variable is set and non-null,
isset ( mixed $var , mixed $... = ? ) : bool
If multiple parameters are passed in at one time, each parameter will be judged by Isset from left to right. If a variable does not pass, it will stop immediately.
isset() can only be used with variables, as passing any other arguments will cause a parsing error.
If you want to check whether a constant has been set, you can use the defined() function.
If you use isset() to check the inaccessible properties of the object, this overloaded method will be called if the __isset() method has been defined.
If a variable has been released using unset()], it will no longer be isset().
Undefined variables will not report syntax errors.
<?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)); // 语法错误
Variables that can be safely used to check objects of objects
// 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()
Judge whether a variable exists, or is empty.
empty ( mixed $var ) : bool
Undefined variables will not report syntax errors.
Parameters are not required to be variables.
empty() is essentially equivalent to !isset($var) || $var == false.
Returns false when var exists and is a non-empty and non-zero value, otherwise returns true.
When empty() is used on an invisible object property, the __isset() method will be called if it exists.
<?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)); // 语法错误
!
Determine whether it is empty. You can also determine whether it exists. Undefined variables will report a PHP Notice and will not report a syntax error and will not terminate the program.
<?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); // 语法错误
?:
Abbreviation for ternary operator.
$c['name'] ?: 10 等价于 !$c['name'] ? 10 : $c['name']
So the basis for its judgment is still: judging whether it is empty. You can also determine whether it exists. Undefined variables will report a PHP Notice and will not report a syntax error and will not terminate the program.
??
$a ?? 10 等价于 isset($a) ? $a : 1
Summary
Determine whether it exists: isset, ??
Determine whether it does not exist or is empty: empty()
Determine whether it is empty. It is not recommended to use it to determine whether it exists:!, ?:
Recommended learning: php video tutorial
The above is the detailed content of What do PHP's ?:, ??, isset, and empty mean?. For more information, please follow other related articles on the PHP Chinese website!