php ?? 和 ?: 操作符的用法和区别
$a = 0; $b = $a ?? 'default'; //int(0) $b2 = isset($a) ? $a : 'default'; //int(0) $c = $a ?: 'default'; //string(7) "default" $c2 = !empty($a) ? $a : 'default'; //string(7) "default" var_dump($b, $b2, $c, $c2); $a = false; $b = $a ?? 'default'; //bool(false) $b2 = isset($a) ? $a : 'default'; //bool(false) $c = $a ?: 'default'; //string(7) "default" $c2 = !empty($a) ? $a : 'default'; var_dump($b, $b2, $c, $c2); //string(7) "default" $a = []; $b = $a ?? 'default'; //array(0) {} $b2 = isset($a) ? $a : 'default'; //array(0) {} $c = $a ?: 'default'; //string(7) "default" $c2 = !empty($a) ? $a : 'default'; //string(7) "default" var_dump($b, $b2, $c, $c2); $b = $aa ?? 'default'; //string(7) "default" $b2 = isset($a) ? $a : 'default'; //string(7) "default" $c = $aa ?: 'default'; //Notice: Undefined variable: aa string(7) "default" $c2 = !empty($a) ? $a : 'default'; //Notice: Undefined variable: aa string(7) "default" var_dump($b, $b2, $c, $c2);
// ?? 是 isset() 的简写形式 $b = $a ?? 'default'; 等价于 $b = isset($a) ? $a : 'default';
// ?: 是 !empty() 的简写形式 $c = $a ?: 'default'; 等价于 $c = !empty($a) ? $a : 'default';
empty($var) 当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的值被认为是空的:"" (空字符串); 0 (作为整数的0); 0.0 (作为浮点数的0); "0" (作为字符串的0); NULL; FALSE; array() (一个空数组); $var; (一个声明了,但是没有值的变量);
isset 如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE