我正在使用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;
我想进一步调试,但我不知道这是哪个记录导致这些关于非对象属性的消息。有没有办法陷阱错误或检查“非对象的属性”,以便我可以转储变量?我不想为每条记录转储这个,因为输出太多了。一般来说,我想知道是否有一种方法来捕获错误以转储变量?谢谢!
答案 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)
实际上没有,但你可以查看是否