解决" Undefined属性:stdClass ::"正确

时间:2016-11-23 09:44:57

标签: php json

这是我的问题,我知道为什么会发生这种情况但是,我不确定如何解决它,因为我对这个问题的研究没有返回任何对我的某些问题有效的内容。

我正在发出cURL请求并解析对象以获取它们的值,然后将其存储在变量中以便稍后插入到数据库中。 HTTP请求来自流服务器。有了这个说,如果流不活动,则对象不存在,但是,如果对象存在,则返回如此...

<IsConnected>true</IsConnected>

因此,在我的脚本中,我一直在解析对象,以便查找对象的值是true还是false,然后将该值存储在变量中以插入到DB中。

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

虽然这很好用,但语法不正确,因为当流不活动时对象不存在时,我会在错误日志中得到以下错误数十个。

  

未定义的属性:stdClass :: $ isConnected

所以我的问题是,我怎样才能正确地解决这个问题,这样当它处于活动状态并且对象存在时,我可以得到它的值为true但是当对象不存在时它是假的?

修改

如果流处于活动状态以及请求返回的内容,则为完整响应。

<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>

2 个答案:

答案 0 :(得分:2)

这个怎么样?

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

答案 1 :(得分:1)

  

虽然这很有效,但语法不正确,因为当对象不存在时

然后在与之交互之前简单地添加对象有效性检查:

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

请注意,其他答案可能会建议您使用isset()进行上述操作,但这是错误的,因为isset()不是正确的工具,因为它处理null的方式。