2012-10-14 44 views
0

我使用Google Map API V3发送Lat/Lng,并返回完整地址。我解析使用Object返回的地址。它适用于很多的地址,但对于其中的一些是使人们对财产是一个非对象的PHP错误:有没有办法调试PHP来捕获非对象属性上的错误?

PHP Notice: Trying to get property of non-object in get5.php on line 47 
PHP Notice: Trying to get property of non-object in get5.php on line 48 
PHP Notice: Trying to get property of non-object in get5.php on line 49 

下面是几行代码为47-49:

$city_google_api = $country->AdministrativeArea->Locality->LocalityName; 
$state_google_api = $country->AdministrativeArea->AdministrativeAreaName; 
$zip_code_google_api = $country->AdministrativeArea->Locality->PostalCode->PostalCodeNumber; 

我想进一步调试,但我不知道哪个记录导致这些消息关于非对象的属性。有没有办法陷入错误或检查“非对象的属性”,以便我可以转储变量?我不想为每条记录转储这个,因为这是太多的输出。一般来说,我想知道是否有方法来捕获错误来转储变量?谢谢!

回答

2

采取:

$city_google_api = $country->AdministrativeArea->Locality->LocalityName; 

和暂时重新写:

$area   = $country->AdministrativeArea; 
$locality  = $area->Locality; 
$city_google_api = $locality->LocalityName; 

执行相同的其他三条线,很快,行号该错误会精确地告诉你问题出在哪里。

分而治之—你的调试技术的朋友。


你也可以防守从一开始就进行编程,使错误不只是更好的报道,但“中招”,在运行时:

if (!is_object($country)) 
    throw SomeException(); 

$area = $country->AdministrativeArea; 

if (!is_object($area)) 
    throw SomeException(); 

$locality = $area->Locality; 

if (!is_object($locality)) 
    throw SomeException(); 

$city_google_api = $locality->LocalityName; 

或者更进一步,检查的实际类型各目的。这通常是矫枉过正的,虽然—一旦你修好了你的代码,你就会知道每个变量有什么类型,而原来的三行就足够了。

0
if (!is_object($country)) { 
    //debug 
} 
if (!is_object($country->AdministrativeArea)) { 
    //debug 
} 
//etc... 
相关问题