2012-10-14 75 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... 
相關問題