在PHP中访问对象属性的正确语法是什么?

时间:2017-02-13 15:55:15

标签: php json

TIA求助。

我有一个调用API的脚本。它返回一个JSON对象,当我在WAMP中运行脚本时出现错误,但是当我在OSX上运行它时没有问题。

这是有问题的一行:

$obj = json_decode($json);

if ($obj->{'Status'} == 'OK'){...}

它在OSX上运行完美,但是当我在WAMP上运行时,我收到以下错误:
注意:尝试获取非对象的属性。

我检查了两个安装都启用了JSON模块。

不确定还要检查什么,或者我是否使用了错误的语法。

由于

5 个答案:

答案 0 :(得分:3)

您可以使用->语法,但如果密钥的字符超出了PHP中有效标识符的范围,您也可以将调用更改为json_decode

json_decode($json, true);

这将返回一个关联数组,您可以使用[]语法访问元素,如此;

$obj['Status'];

答案 1 :(得分:1)

简单地说,$object->property将是正确的方法。

答案 2 :(得分:1)

如果php无法使用json_decode对json进行解码,则$obj的值为null,因此它不会是对象。这可能是您收到此错误的原因。

最好确保正确解析json。像这样:

$obj = json_decode($json);
if (isset($obj) && $obj->status === 'OK') {...}

此外,读取对象属性的最佳方法是在箭头后面直接使用属性的名称,如我的示例所示。

答案 3 :(得分:1)

通常,在php中,您可以使用" $ obj-> status"来访问对象的属性。或者" foreach($ obj as $ key => $ value)"获取属性值。

答案 4 :(得分:0)

谢谢大家。上面的所有答案都是正确的,不同的方法来修复我原来的语法问题 但是,我发现我的WAMP和OSX安装之间的区别在于,在WAMP中,需要以下内容:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
这就是为什么我的$ obj varible首先是null。