✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

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

17

У попередніх публікаціях я добре писав про роботу з 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі