2016-11-23 414 views
2

這是我的問題,我知道爲什麼會發生這種情況,但我不確定如何解決此問題,因爲我對此問題的研究沒有返回任何對我的問題有效的任何問題。正確解決「Undefined property:stdClass ::」

我正在做一個cURL請求並解析對象以獲取它們的值,然後將其存儲在一個變量中以便稍後插入到數據庫中。 HTTP請求來自流式服務器。隨着中說,如果流不活躍的對象是不存在的,但是,如果對象是目前它被返回是這樣的...

<IsConnected>true</IsConnected> 

所以在我的劇本我已經解析的對象,像這樣找如果對象的值爲true或false,則將該值存儲在變量中以插入到DB中。

$streamStatus = $obj->isConnected?'true':'false'; 

雖然這偉大工程,這是不正確的語法,因爲當物體不存在由於不活躍的流然後我由數十得到我的錯誤日誌中的錯誤。

未定義的屬性:stdClass的:: $ isConnected

所以我的問題是,我怎麼能我能很好地解決這個,所以我可以得到它的真正價值,當它處於活動狀態和對象是存在但當對象不存在時爲false?

編輯

以下是完整的響應如果流是活動的,由該請求返回什麼。

<IncomingStream serverName="_defaultServer_"> 
<ApplicationInstance>_definst_</ApplicationInstance> 
<Name>ncopeland</Name> 
<SourceIp>rtmp://xx.xxx.xx.xx:xxxxxx</SourceIp> 
<IsRecordingSet>false</IsRecordingSet> 
<IsStreamManagerStream>false</IsStreamManagerStream> 
<IsPublishedToVOD>false</IsPublishedToVOD> 
<IsConnected>true</IsConnected> 
<IsPTZEnabled>false</IsPTZEnabled> 
<PtzPollingInterval>2000</PtzPollingInterval> 
</IncomingStream> 
+0

爲什麼不打印出$ obj來查看存儲在該變量中的內容? 使用print_r(),因爲它顯示了一個很好的組織結果。 – Imaginaroom

+0

我已經知道存儲的內容。問題是檢查對象是否可用。 – Texan78

回答

1

雖然這偉大工程,這是不正確的語法,因爲當物體不存在

然後只需添加爲對象有效性檢查前與其進行交互:

$streamStatus = (is_object($obj) && property_exists($obj, 'isConnected') && $obj->isConnected) ? 'true' : 'false'; 

請注意,其他答案可能會建議使用isset()以上但這是錯誤的,因爲isset()是不正確的工具,因爲任務到期o它如何處理null

+1

對於使用isset(),你提出了一個非常有效的觀點。我也會試試這個。 – Texan78

2

這個怎麼樣?

$streamStatus = (isset($obj->isConnected) && $obj->isConnected)?'true':'false'; 
+0

是的,isset是我正在尋找,但不知道如何在這種情況下應用它。讓我測試一下,我會報告回來,但是,我認爲這應該可以做到。 – Texan78