此代码在PHP 7.x中有效
$array = ['asda' => ['asdasd']];
$var = $array['asda']['asdasd'] ?? "yes!";
echo $var;
如果像在旧版PHP中那样用??
替换?:
,则此代码将不起作用,例如:
$array = ['asda' => ['asdasd']];
$var = $array['asda']['asdasd'] ? $array['asda']['asdasd'] : "yes!";
echo $var;
这意味着,我们将收到类似以下的错误:
Notice</b>: Undefined index: asdasd in <b>[...][...]</b> on line
那么,我们可以使用PHP 7.x中的第一个示例而不担心任何奇怪/意外的in behind
吗?我的意思是,使用它安全替代,例如array_key_exists
或isset
答案 0 :(得分:2)
使用isset()
测试元素是否存在。
$var = isset($array['asda']['asdasd']) ? $array['asda']['asdasd'] : "yes!";
旧的:?
条件运算符是简单的if/then/else
-它测试第一个表达式的真实性,然后根据此条件返回第二个或第三个表达式。测试表达式可以正常执行,因此,如果其中包含未定义的变量,索引或属性,您将收到有关该表达式的常规警告。
另一方面,新的??
空值运算符将测试是否定义了第一个表达式,而不是NULL
,不仅测试它是否真实。由于它自己检查表达式是否已定义,因此如果没有定义,它不会产生警告。它专门用于替换isset()
条件。