注意:在PHP 5.6中使用JSON时,尝试获取非对象错误的属性

时间:2017-10-07 00:50:37

标签: php json

我有PHP网页,但我有一个代码问题,我在这里搜索,得到了一些类似的答案,但很抱歉我不明白如何解决我的错误。当我使用MySQLI和PHP 7.1,然后我的网页工作,但有一些错误,当我使用MySQL和PHP 5.6,然后我的网页工作完美,除了这个错误,如下所示。

这是我的错误:

Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Fatal error: Uncaught exception 'Exception' with message 'Failed: ' in /var/www/html/lib/block_io.php:95 Stack trace: #0 /var/www/html/lib/block_io.php(53): BlockIo->_request('get_new_address', Array) #1 /var/www/html/block.php(20): BlockIo->__call('get_new_address', Array) #2 /var/www/html/block.php(20): BlockIo->get_new_address() #3 /var/www/html/deposit.php(76): include('/var/www/html/b...') #4 {main} thrown in /var/www/html/lib/block_io.php on line 95

这是代码中的一行

81         // it's a GET method
82         if ($method == 'GET') { $url .= '&' . $addedData; }
83         curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
84         curl_setopt($ch, CURLOPT_URL, $url);
85         if ($method == 'POST')
86         { // this was a POST method
87         curl_setopt($ch, CURLOPT_POST, 1);
88         curl_setopt($ch, CURLOPT_POSTFIELDS, $addedData);
89         }
90         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
91         // Execute the cURL request
92         $result = curl_exec($ch);
93         curl_close($ch);
94         $json_result = json_decode($result);
95         if ($json_result->status != 'success') { throw new 
           Exception('Failed: ' . $json_result->data->error_message); }
96          // Spit back the response object or fail
97          return $result ? $json_result : false;        
98          }

我知道我不能问好问题,我不知道怎么在这里搜索答案,我不知道怎么用答案如果我找到类似的东西,但也许有人可以解释我,我有什么这段代码错了,并给出一些如何解决的建议

修改

好的,我不知道我是否做得对,但这个var_dump我在我的第94行使用

94         $json_result = var_dump($result);

然后我收到此错误

bool(false) 
Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Notice: Trying to get property of non-object in /var/www/html/lib/block_io.php on line 95

Fatal error: Uncaught exception 'Exception' with message 'Failed: ' in /var/www/html/lib/block_io.php:95 Stack trace: #0 /var/www/html/lib/block_io.php(53): BlockIo->_request('get_new_address', Array) #1 /var/www/html/block.php(20): BlockIo->__call('get_new_address', Array) #2 /var/www/html/block.php(20): BlockIo->get_new_address() #3 /var/www/html/deposit.php(76): include('/var/www/html/b...') #4 {main} thrown in /var/www/html/lib/block_io.php on line 95

好的,这是我的完整php文件,也许有人看到错误其他行不行95,请帮帮我,我不知道如何解决这个错误

http://sandbox.onlinephpfunctions.com/code/29b428d4f224990f865e2a708fd188fd66016766

2 个答案:

答案 0 :(得分:0)

尝试json_decode( $result, true );你需要告诉函数它是一个对象

答案 1 :(得分:0)

json_decode根据给定的json输入返回true,false,null,对象或数组。 See here

$json_result->status != 'success'假设返回了对象。

为了验证这一点,请暂时更改第95行:

if ($json_result === true) {
    echo('TRUE');
}
elseif ($json_result === false) {
    echo('FALSE');
}
elseif ($json_result === null) {
    echo('NULL');
}
elseif (is_array($json_result) {
    echo('ARRAY');
    echo($json_result['status'];
}
else {
    echo('EXPECTED OBJECT');
    echo($json_result->status);
}

或者在第92行检查$ result的内容。

然后你会看到你实际拥有的json以及从中得到的解码值。

如var-dump所示,您似乎得到了false。如果false不是服务发送的有效返回值,那么您的卷曲调用很可能是错误的。