何时在php中连接使用括号

时间:2016-10-13 12:47:33

标签: php string concatenation

我正在尝试在收到非200响应时记录一些调试消息。响应具有response属性,该属性可以是字符串,也可以是具有消息属性的object

这是我的日志声明:

\Log::info('Caller non 200 response received. \nMessage' .  is_object($response->response)?$response->response->message : $response->response);

我得到了

  

尝试获取非对象的属性

在上面提到的那一行。我改成了:

\Log::info('Caller non 200 response received. \nMessage' .  (is_object($response->response)?$response->response->message : $response->response) );

注意三元运算符周围的括号,它可以工作。我错过了什么?

同样在这种情况下,我从false来电回复is_object

1 个答案:

答案 0 :(得分:0)

好的,事实证明,当你这样做时:

$val = 'some string ' . is_object($notObj) ? 'yes' : 'no'

将评估$val 某些字符串是 而不是no,因为$notObj不是对象而is_object 1}}将返回false

因为我们将字符串与is_object的输出连接起来,所以这就是评估为true的原因。

为了克服这个问题,你需要在三元运算符周围加上括号:

$val = 'some string ' . (is_object($notObj) ? 'yes' : 'no')

现在,这将成功评估$val 某些字符串否

感谢@Ultimater对此进行解释。