【发布时间】:2019-04-30 08:29:15
【问题描述】:
我已阅读 PHP isset 和 null 合并运算符用于忽略 PHP 注意:未定义索引:
我也看过这个帖子 PHP ternary operator vs null coalescing operator
但是在将它们与字符串连接运算符一起使用时,我得到了 PHP 通知:
<?php
$array = ['a'=>'d'];
$c = $array['c'] ?? '';
$d = isset($array['c']) ? $array['c'] : '';
$val = "sgadjgjsd".$array['c'] ?? ''; // PHP Notice: Undefined index: c in /home/cg/root/986045/main.php on line 6
$val2 = "sgadjgjsd".isset($array['c']) ? $array['c'] : ''; // PHP Notice: Undefined index: c in /home/cg/root/986045/main.php on line 7
?>
编辑:
我知道这可以通过以下方法解决
1) 赋值给变量像
$val = "sgadjgjsd".$c = $array['c'] ?? '';
2) 使用@
$val = "sgadjgjsd".@$array['c'] ?? '';
3) 添加括号(正如 Karsten 建议的那样)
$val = "sgadjgjsd".($array['c'] ?? '');
但我正在寻找它背后的原因。
【问题讨论】:
-
在
("sgadjgjsd".$array['c'])周围使用方括号。运营商.has higher precedence than the terniary -
感谢@KarstenKoop 的回复,但我正在寻找背后的原因。
-
因为你在三元生效之前就拼接了,所以通知来自拼接