Php 试图获取非对象错误的属性
下面给出的代码显示以下错误: 未定义的属性:stdClass::$duration在C:\wamp\www\temp\yy.php中 正在尝试获取C:\wamp\www\temp\yy.php中非对象的属性 如何解决Php 试图获取非对象错误的属性,php,Php,下面给出的代码显示以下错误: 未定义的属性:stdClass::$duration在C:\wamp\www\temp\yy.php中 正在尝试获取C:\wamp\www\temp\yy.php中非对象的属性 如何解决 $q = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$a,$b&destinations=$c,$d&mode=driving&sensor=false&quo
$q = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$a,$b&destinations=$c,$d&mode=driving&sensor=false";
$json = file_get_contents($q);
$details = json_decode($json);
$d=$details->rows[0]->elements[0]->duration->text;
您收到的错误消息会准确地告诉您问题所在。在
json_decode
返回的对象上找不到duration
属性;您在引用的代码块(即)中进行的上述查询返回以下JSON:
{
"destination_addresses" : [ "Catamarca Province, Argentina" ],
"origin_addresses" : [ "Augsburg, Germany" ],
"rows" : [
{
"elements" : [
{
"status" : "ZERO_RESULTS"
}
]
}
],
"status" : "OK"
}
综上所述,上面没有返回duration
元素,因此调用如下:
$json = file_get_contents($q);
$details = json_decode($json);
$d=$details->rows[0]->elements[0]->duration->text;
将导致您看到的错误
您可以使用错误处理(例如,try…catch
)获取持续时间和文本(如果存在),或者测试属性是否存在,等等
基本上,它归结为没有额外的代码,您不能依赖于
duration
将是返回的JSON
的一个元素这一事实,并且您必须对其进行解释。您可以尝试以下方法:
if($details->rows[0]->elements[0]->status == 'OK') {
$text = $details->rows[0]->elements[0]->duration->text;
}
如果未返回任何结果,则您可能会得到以下结果,如$details->rows[0]->elements[0]
:
stdClass Object
(
[status] => ZERO_RESULTS
)
stdClass Object
(
[distance] => stdClass Object
(
[text] => 1Â 716 km
[value] => 1715523
)
[duration] => stdClass Object
(
[text] => 3 jours 19 heures
[value] => 329133
)
[status] => OK
)
如果返回了一个结果,那么您将得到如下结果:$details->rows[0]->elements[0]
:
stdClass Object
(
[status] => ZERO_RESULTS
)
stdClass Object
(
[distance] => stdClass Object
(
[text] => 1Â 716 km
[value] => 1715523
)
[duration] => stdClass Object
(
[text] => 3 jours 19 heures
[value] => 329133
)
[status] => OK
)
因此,如果$details->rows[0]->elements[0]->status
为OK
,则存在distance
和duration
属性,每个属性包含一个stdClass
对象,该对象具有两个属性,即text
和value
。确保在变量中传递了正确的数据($a
、$b
、$c
和$d
)
请尝试以下示例:
对
$json
执行var_dump
,以确保它是有效的json。另外,对$details
执行var\u dump
以确保它是一个对象。你在这些(origins=$a,$b&destinations=$c,$d
)变量中有什么?有一些变量origins=$a,$b&destinations=$c,$d
;然而,尽管您可能期望持续时间存在,但显然仍有一些情况可能不存在。仍建议进行额外处理。根据作者关于变量的回答,我将更新我的答案(或收回)。这是一个比我给出的答案更完整的答案。:)