Home  >  Article  >  Backend Development  >  What do PHP's ?:, ??, isset, and empty mean?

What do PHP's ?:, ??, isset, and empty mean?

醉折花枝作酒筹
醉折花枝作酒筹forward
2021-07-20 16:29:102105browse

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.

What do PHP's ?:, ??, isset, and empty mean?

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[&#39;name&#39;])); // 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[&#39;name&#39;])); // 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[&#39;name&#39;]); // 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[&#39;name&#39;] ?: 10 等价于 !$c[&#39;name&#39;] ? 10 : $c[&#39;name&#39;]

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!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete