2014-04-22 53 views
0

下列错误显示为下面给出的代码PROPERT:试图让非对象错误

未定义的属性: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; 
+4

做的'$ json'一个'var_dump',以确保它是有效的JSON。此外,执行'$ details'的'var_dump'来确保它是一个对象。 –

+1

你有什么在这些('起源= $ a,$ b&destinations = $ c,$ d')变量? –

回答

0

您收到的错误消息告诉你到底是什么问题。在由json_decode返回的对象上找不到duration属性;你在引用代码块使上面的查询(即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的元素,你必须考虑它。

+0

有一些变量'origins = $ a,$ b&destinations = $ c,$ d'。 –

+0

好的我在他的查询中甚至没有看到;然而,虽然你可能期望持续时间在那里,但显然还是有可能不是。额外的处理仍然建议。根据作者对变量的回答,我会更新我的答案(或收回它)。 –

+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然后有一个distance和一个duration属性,每个包含一个stdClass对象具有textvalue两个属性。确保你在变量中传递正确的数据($a,$b,$c$d)。

试试这个,例如:

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

比我给出的答案要完整得多。 :) –