✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Широта и долгота в PHP: несколько полезных практик

21

В предыдущих постах я немало написал о работе с Google Maps API. Честно говоря, я не работал с ним после того поста.

Тем не менее, мне приходилось работать с широтой и долготой в PHP, и есть некоторые приемы, которые я начал использовать, и которые, я думаю, могут нам хорошо пригодиться при работе с координатами или значениями с плавающей запятой в целом.

В следующем фрагменте кода я расскажу о подходе, который я использовал, и о том, почему я это сделал. Но я хочу прояснить, что, если вы читаете это в связи с API Карт Google, я мало что могу предложить в отношении того, как это работает, и текущей версии их API.

Широта и долгота в PHP

Всякий раз, когда вы работаете с широтой и долготой в PHP, вы работаете со значениями с плавающей запятой, верно? Таким образом, вы никогда не захотите разбирать их на что-то меньшее; в противном случае вы потеряете данные и не сможете найти то, что пытаетесь найти.

Итак, во всех смыслах предположим, что у вас есть информация, поступающая на сервер, и вам нужно работать с ней с помощью PHP.

Две вещи, которые вы хотите запомнить:

  1. очищать входящие данные,
  2. убедитесь, что оно преобразовано в значение с плавающей запятой.

Это можно сделать с помощью функций PHP filter_var и floatval, о которых я сейчас расскажу. Обратите внимание, однако, что если результат floatval не возвращает число с плавающей запятой, вам нужен изящный способ справиться с этим.

Согласно руководству, floatval может возвращать следующее:

Значение с плавающей запятой данной переменной. Пустые массивы возвращают 0, непустые массивы возвращают 1. Строки, скорее всего, возвращают 0, хотя это зависит от крайних левых символов строки. Применяются общие правила поплавкового заброса.

Позже в этом посте мы рассмотрим, как сделать это более изящно.

Анализ входящей широты и долготы

Предположим, что входящие значения находятся в PHP-коллекции $_REQUEST (которая относится к HTTP-запросам, поступающим на сервер) с ключами acme-demo-latitude и acme-demo-longitude. 

Мы можем получить их следующим образом :

<?php

$latitude  = $_REQUEST['acme-demo-latitude'];
$longitude = $_REQUEST['acme-demo-longitude'];

Но этого недостаточно. Во- первых, нам нужно использовать filter_var, чтобы убедиться, что данные очищены и соответствуют схеме с плавающей запятой :

<?php

$latitude  = filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT
);

$longitude = filter_var(
    $_REQUEST['acme-demo-longitude'],
    FILTER_SANITIZE_NUMBER_FLOAT
);

Затем я считаю полезным использовать floatval для анализа результата как значения с плавающей запятой. В результате следующий блок кода выглядит следующим образом :

<?php

$latitude  = floatval(
  filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT) );

$longitude = floatval(
  filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT) );

После чего вы можете использовать его. Но помните, нам все еще нужно убедиться, что возвращаемые значения являются значениями с плавающей запятой.

Проверка данных

Теперь, когда у нас есть информация, нам нужно убедиться, что она выглядит хорошо. И если это не так, мы должны обращаться с этим соответствующим образом. Если это не так, то мы можем просто:

  1. вернуть false из функции, из которой он содержится,
  2. генерировать исключение и позволять вызывающему объекту обрабатывать его так, как он считает нужным.

Каждый из этих примеров может выглядеть так :

<?php

// Return false...
if (! (is_float( $latitude) && is_float( $longitude) )) {
  return false;
}

// Or throw an exception...
if (! (is_float( $latitude) && is_float( $longitude) )) {
  throw new Exception('Latitude and longitude are not valid floating point values.');
}

В конечном счете, решение о том, как обрабатывать значения, когда они не в правильном формате после их синтаксического анализа, остается за вами.

Это лучшие практики?

Честно говоря, сомневаюсь. Я знаю, что это те вещи, которые я использовал и которые я нашел полезными. Он также обеспечивает защитный, устойчивый способ убедиться, что ваши значения верны.

Но если есть лучшие способы сделать это, я готов выслушать их в комментариях.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее