array_key_exists和??在PHP 7.x中

时间:2018-10-05 05:25:01

标签: php syntax

此代码在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_existsisset

1 个答案:

答案 0 :(得分:2)

使用isset()测试元素是否存在。

$var = isset($array['asda']['asdasd']) ? $array['asda']['asdasd'] : "yes!";

旧的:?条件运算符是简单的if/then/else -它测试第一个表达式的真实性,然后根据此条件返回第二个或第三个表达式。测试表达式可以正常执行,因此,如果其中包含未定义的变量,索引或属性,您将收到有关该表达式的常规警告。

另一方面,新的??空值运算符将测试是否定义了第一个表达式,而不是NULL,不仅测试它是否真实。由于它自己检查表达式是否已定义,因此如果没有定义,它不会产生警告。它专门用于替换isset()条件。

请参见PHP ternary operator vs null coalescing operator