Проверка наличия ключа в объектно-ориентированном программировании

В моем случае MongoDB driver 3.5.0, SLF4j+Log4j12 было достаточно добавить:

log4j.logger.org.mongodb.driver=OFF

в файл конфигурации Log4j .properties.

-1
задан xomena 3 March 2019 в 13:24
поделиться

1 ответ

Вы должны знать, что веб-сервис API геокодирования также возвращает статус в ответе. Статус показывает, есть ли в ответе действительный элемент или что-то пошло не так, и у вас нет результата.

Просмотрите документацию https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes , и вы увидите, что возможны следующие статусы

  • "ОК"
  • "ZERO_RESULTS"
  • "OVER_DAILY_LIMIT"
  • "OVER_QUERY_LIMIT"
  • "REQUEST_DENIED"
  • "INVALID_REQUEST "
  • " UNKNOWN_ERROR "

Итак, прежде чем пытаться получить доступ к $dataset->results[0], сначала проверьте значение $dataset->status. Если это «ОК», вы можете безопасно получить результаты, в противном случае правильно обработайте код ошибки.

Фрагмент кода может быть

 $dataset = json_decode($jsonResponse);

 if ($dataset->status == "OK") {
     if (isset($dataset->results[0])) {
         $latitude = $dataset->results[0]->geometry->location->lat;
         $longitude = $dataset->results[0]->geometry->location->lng;
     }
 } elseif ($dataset->status == "ZERO_RESULTS") {
     //TODO: process zero results response 
 } elseif ($dataset->status == "OVER_DAILY_LIMIT" {
     //TODO: process over daily quota 
 } elseif ($dataset->status == "OVER_QUERY_LIMIT" {
     //TODO: process over QPS quota  
 } elseif ($dataset->status == "REQUEST_DENIED" {
     //TODO: process request denied  
 } elseif ($dataset->status == "INVALID_REQUEST" {
     //TODO: process invalid request response  
 } elseif ($dataset->status == "UNKNOWN_ERROR" {
     //TODO: process unknown error response 
 }

Надеюсь, это поможет!

0
ответ дан xomena 3 March 2019 в 13:24
поделиться