Php 如何使用null coalesce运算符将语句附加到字符串?
我有一个字符串,其中有一个运算符:Php 如何使用null coalesce运算符将语句附加到字符串?,php,php-7,Php,Php 7,我有一个字符串,其中有一个运算符: echo 'abc.' . $type ?? 'no type' . 'xyz'; 如果$type存在,我希望它是值,如果不存在,我希望'no type'是值 但是有了上面的代码,我就得到了一个$type未定义的错误。在我的示例中没有定义它,因为我希望输出“no type” 我哪里做错了?: 还是这个() 您需要在??接线员 echo 'abc.' . ($type ?? 'no type') . 'xyz'; 它所做的是像“abc”一样评估它$键入,然后
echo 'abc.' . $type ?? 'no type' . 'xyz';
如果$type存在,我希望它是值,如果不存在,我希望'no type'是值
但是有了上面的代码,我就得到了一个$type未定义的错误。在我的示例中没有定义它,因为我希望输出“no type”
我哪里做错了?:
还是这个()
您需要在??接线员
echo 'abc.' . ($type ?? 'no type') . 'xyz';
它所做的是像“abc”一样评估它$键入,然后键入??
这一切都是关于(感谢@Blackhole的提示)。使用时不需要使用串联。它可以接受多个参数,只需用逗号分隔它们(就像它是一个实际函数):
这也(稍微)比向上投票的答案更有效,特别是对于长字符串(PHP不必在显示之前将整个字符串构造/存储在缓冲区中)。我们可以从询问您使用的PHP版本开始,因为
?
是一个相对较新的运算符。我使用的是PHP7。请更新您的问题,以提及这一点。没有人应该阅读注释线程来回答您的问题=)另外,您是否确保通读了运算符优先级列表?(具体地说,您想看看
和??
中的哪一个先到)A到文档。不过,在这种情况下,这并不是一个真正有用的答案。使用??
可以,但是
具有更高的优先级,因此??
表达式需要放在括号中。
echo 'abc.' . (isset($type) ? $type : 'no type' ) . 'xyz';
echo 'abc.' . ($type ?? 'no type') . 'xyz';
echo 'abc.', $type ?? 'no type', 'xyz';