2016-11-23 3647 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