2017-02-13 85 views
0

TIA为您提供帮助。在PHP中访问对象属性的正确语法是什么?

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

这是有问题的行:

$obj = json_decode($json); 

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

它运行完美的OSX,但是当我在WAMP运行中出现以下错误:
注意:试图让非对象的属性。

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

不知道还有什么检查,或者如果我使用了错误的语法。

感谢

+2

'$ obj-> Status'但你得到错误信息表明'$ obj'没有正确让你的WAMP服务器 –

+0

添加JSON字符串你的问题将使它更容易回答的初始化。 – mnutsch

+0

你不需要在**非对象** :) –

回答

0

谢谢大家。以上所有答案都是正确的,并且有不同的方法来解决我原来的语法问题。
然而,我发现,我的WAMP和OSX安装之间的区别在于,在WAMP,需要如下:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
这就是为什么我的$ OBJ varible是摆在首位空。

1

简单,$object->property将是正确的方式。

3

您可以使用->语法,但如果键有是出在PHP有效识别范围内的字符,你还可以改变您的来电json_decode这样的:

json_decode($json, true);

这将返回一个关联数组,你可以像这样访问[]语法的元素;

$obj['Status'];

1

如果PHP是无法使用的json_decode JSON解码,$obj将具有null的值,所以它不会是一个对象。这可能是你得到这个错误的原因。

最好是确保该JSON是正确分析。像这样:

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

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

+0

'如果(json_last_error()== JSON_ERROR_NONE!) '... –

1

通常情况下,在PHP中您可以使用“$ obj->状态”或“的foreach($ OBJ为$键=> $值)”访问对象的属性来获得属性值。