前段时间用??遇到了一个坑,特此记录一下。
代码
直接上代码
$a = false ?? 1;
以上$s返回的是false。不是1。
对比一下empty和isset
<?php
function testA()
{
return false;
}
function testB()
{
return NULL;
}
function testC()
{
return "";
}
$testa = testA();
$testb = testB();
$testc = testC();
$a = $testa ?? 1;
$b = $testb ?? 2;
$c = $testc ?? 3;
echo "-------------??------------".PHP_EOL;
var_dump($a); // false
var_dump($b); // 2
var_dump($c); // ""(空字符)
$a = !empty($testa) ? testA() : 1;
$b = !empty($testb) ? testB() : 2;
$c = !empty($testc) ? testC() : 3;
echo "-------------empty------------".PHP_EOL;
var_dump($a); // 1
var_dump($b); // 2
var_dump($c); // 3
$a = isset($testa) ? testA() : 1;
$b = isset($testb) ? testB() : 2;
$c = isset($testc) ? testC() : 3;
echo "-------------isset------------".PHP_EOL;
var_dump($a); // false
var_dump($b); // 2
var_dump($c); // ""(空字符)
总结
??和isset用法类似。
empty判断以下的东西被认为是空的:
“” (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
“0” (作为字符串的0)
null
false
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)