0

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

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

4

3 回答 3

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;

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

于 2012-10-14T22:44:25.530 回答
0
if (!is_object($country)) {
    //debug
}
if (!is_object($country->AdministrativeArea)) {
    //debug
}
//etc...
于 2012-10-14T22:44:23.743 回答
0

实际上没有,但你可以检查一下

于 2012-10-14T22:44:40.100 回答