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;

他の 3 行についても同じことを行うと、エラーの行番号から問題の場所が正確にわかります。

分割統治 — デバッグテクニックの友。


エラーがより適切に報告されるだけでなく、実行時に「キャッチ」されるように、最初から防御的にプログラムすることもできます。

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;

またはさらに進んで、各オブジェクトの実際のタイプを調べます。ただし、これは通常やり過ぎです。コードを修正すると、各変数の型がわかるので、元の 3 行で十分です。

于 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 に答える