我在以下位置有一个带有运算符的字符串:
echo 'abc.' . $type ?? 'no type' . 'xyz';
如果$ type存在,我希望将其作为值,否则,我希望将“ no type”作为其值。
但是通过上面的操作,我得到一个$ type undefined错误。在我的示例中未定义它,因为我希望输出“ no type”。
我要去哪里错了?
答案 0 :(得分:8)
您需要在??周围添加括号。操作员...
echo 'abc.' . ($type ?? 'no type') . 'xyz';
它所做的就是先评估'abc.' . $type
,然后再评估??
。
关于operator precedence的一切(感谢@Blackhole提示)。
答案 1 :(得分:1)
echo 'abc.' . ($type ?? 'no type') . 'xyz';
或这个(ternary operator)
echo 'abc.' . (isset($type) ? $type : 'no type' ) . 'xyz';
答案 2 :(得分:0)
使用echo
时不需要使用串联。它可以有多个参数,只需用逗号将它们分开(就好像是一个实际函数一样):
echo 'abc.', $type ?? 'no type', 'xyz';
这也(略)比提议的答案更有效,特别是对于长字符串(PHP在显示字符串之前不必在缓冲区中构造/存储整个字符串)。