试图获取非对象错误的属性

时间:2014-04-22 19:40:47

标签: php

以下错误显示以下错误:

  

未定义的属性:stdClass :: $ 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";
$json = file_get_contents($q);
$details = json_decode($json);
$d=$details->rows[0]->elements[0]->duration->text;

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

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
)

如果返回了结果,那么您将得到类似$details->rows[0]->elements[0]的内容:

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]->statusOK,则会有distanceduration属性,每个属性都包含stdClass个对象,其中包含两个属性{ {1}}和text。确保您在变量中传递了正确的数据(value$a$b$c)。

试试这个例子:

  

http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisco|Victoria+BC&mode=bicycling&language=fr-FR&sensor=false

答案 1 :(得分:0)

您收到的错误消息正在告诉您具体问题。 duration返回的对象上找不到json_decode属性;您在引用的代码块中进行的上述查询(即this one)将返回以下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的元素的事实,你必须考虑到它