【问题标题】:Addressing "Undefined property: stdClass::" properly正确处理“未定义属性:stdClass::”
【发布时间】:2016-11-23 18:02:18
【问题描述】:

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

我正在发出 cURL 请求并解析对象以获取它们的值,然后将其存储在变量中以便稍后插入数据库。 HTTP 请求来自流式服务器。话虽如此,如果流未处于活动状态,则对象不存在,但是,如果对象存在,则像这样返回...

<IsConnected>true</IsConnected>

所以在我的脚本中,我一直在解析对象,以查找对象的值是真还是假,然后将该值存储在变量中以插入数据库。

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

虽然这很好用,但它的语法不正确,因为当由于流未处于活动状态而导致对象不存在时,我的错误日志中会出现几十个以下错误。

未定义属性:stdClass::$isConnected

所以我的问题是,我怎样才能正确解决这个问题,以便在它处于活动状态并且对象存在时获取它的值 true,但在对象不存在时获取 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>

【问题讨论】:

  • 为什么不打印出 $obj 以查看该变量中存储的内容?使用 print_r() 因为它显示了一个很好的组织结果。
  • 我已经知道存储了什么。问题是检查对象是否可用。

标签: php json


【解决方案1】:

这个怎么样?

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

【讨论】:

  • 是的,我一直在寻找 isset,但不确定如何在这种情况下应用它。让我测试一下,我会报告回来,但我认为这应该可以解决问题。
【解决方案2】:

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

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

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

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

【讨论】:

  • 关于使用 isset(),您提出了一个非常有效的观点。我也会尝试一下。
猜你喜欢
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 2016-04-20
  • 2019-06-13
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多