有没有办法调试PHP来捕获非对象属性的错误?

时间:2012-10-14 22:40:37

标签: php

我正在使用Google Map API V3将其发送到Lat / Lng并返回完整地址。我正在解析使用Object返回的地址。它适用于许多地址,但对于其中一些地址,它会生成关于该属性为非对象的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;

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

3 个答案:

答案 0 :(得分: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;

或进一步检查每个对象的实际类型。这通常是矫枉过正 - 一旦修复了代码,就会知道每个变量的类型,原来的三行就足够了。

答案 1 :(得分:0)

if (!is_object($country)) {
    //debug
}
if (!is_object($country->AdministrativeArea)) {
    //debug
}
//etc...

答案 2 :(得分:0)

实际上没有,但你可以查看是否