2016-10-13 28 views
1

我正在嘗試在收到非200響應時記錄一些調試消息。該響應具有response屬性,該屬性可以是字符串,也可以是具有消息屬性的object什麼時候在串聯中使用括號php

這是我的日誌語句:

\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)); 

注意周圍的三元運算符的括號,和它的作品。我錯過了什麼?

此外,我從is_object調用返回false返回。

+0

如果'is_object($ response-> response)'爲假,在三元運算符之前加一個連接,它會使情況成立,並嘗試使用'$ response-> response-> message', is_object'實際上在您的測試中是包含響應屬性的錯誤。 – Ultimater

+0

它具有響應屬性@JonStirling ..並且它有一個字符串值。 –

+0

我不明白@Ultimater如何在三元運算符之前放置連接使得情況成立? –

回答

0

好了,事實證明,當你做:

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

將評估$val一些字符串的no代替,因爲$notObj不是一個對象,並is_object將返回false

因爲我們將字符串連接到輸出is_object,這就是爲什麼計算結果爲true

要克服你需要把括號圍繞三元運算符是這樣的:

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

現在,這將成功地評估$val一些字符串沒有

感謝@Ultimater對此的解釋。

相關問題