Leveys- ja pituusaste PHP:ssä: muutamia hyödyllisiä käytäntöjä
Aiemmissa viesteissä kirjoitin hyvän osan Google Mapsin sovellusliittymän kanssa työskentelystä. Todellisuudessa en ole työskennellyt sen kanssa sen viestin jälkeen.
Olen kuitenkin joutunut työskentelemään leveys- ja pituusasteiden kanssa PHP:ssä, ja joitain käytäntöjä, joita olen alkanut käyttää, uskon voivan palvella meitä hyvin työskenneltäessä koordinaattien tai liukulukujen kanssa yleensä.
Seuraavassa koodiosassa kerron käyttämäni lähestymistavan ja miksi olen tehnyt niin. Haluan kuitenkin tehdä selväksi, että jos luet tätä suhteessa Google Mapsin sovellusliittymään, en voi tarjota paljoakaan sen toimivuudelle ja heidän API:n nykyiselle versiolle.
Leveys- ja pituusaste PHP:ssä
Aina kun työskentelet leveys- ja pituusasteiden kanssa PHP:ssä, käytät liukulukuarvoja, eikö niin? Joten et koskaan halua jäsentää niitä millekään pienemmäksi; Muuten menetät tietoja etkä pysty paikantamaan mitä tahansa, mitä yrität paikantaa.
Oletetaan siis, että palvelimelle tulee tietoa ja sinun on työskenneltävä sen kanssa PHP:n avulla.
Kaksi asiaa, jotka haluat muistaa, ovat:
- puhdistaa saapuvat tiedot,
- varmista, että se on muunnettu liukulukuksi.
Tämä voidaan tehdä käyttämällä PHP:n filter_var- ja floatval -funktioita, joista puhun hetken. Huomaa kuitenkin, että jos floatvalin tulos ei palauta liukulukua, sinulla on oltava siro tapa käsitellä se.
Käsikirjan mukaan floatval voi palauttaa seuraavat:
Annetun muuttujan kelluva arvo. Tyhjät taulukot palauttavat 0, ei-tyhjät taulukot 1. Strings palauttavat todennäköisesti 0, vaikka tämä riippuu merkkijonon vasemmanpuoleisista merkeistä. Float-heiton yleiset säännöt ovat voimassa.
Katsotaan kuinka käsitellä tätä sulavammin myöhemmin postauksessa.
Jäsentää saapuvan leveysasteen ja pituusasteen
Oletetaan, että saapuvat arvot ovat PHP:n $_REQUEST – kokoelmassa (jotka viittaavat palvelimelle tuleviin HTTP-pyyntöihin) näppäimillä acme-demo-latitude ja acme-demo-longitude.
Voimme hakea ne näin :
<?php
$latitude = $_REQUEST['acme-demo-latitude'];
$longitude = $_REQUEST['acme-demo-longitude'];
Mutta tämä ei riitä. Ensin meidän on käytettävä filter_var -toimintoa varmistaaksemme, että tiedot on puhdistettu ja että ne noudattavat liukulukukaaviota :
<?php
$latitude = filter_var(
$_REQUEST['acme-demo-latitude'],
FILTER_SANITIZE_NUMBER_FLOAT
);
$longitude = filter_var(
$_REQUEST['acme-demo-longitude'],
FILTER_SANITIZE_NUMBER_FLOAT
);
Seuraavaksi minusta on hyödyllistä käyttää floatvalia tuloksen jäsentämiseen liukulukuarvona. Tämä jättää seuraavan koodilohkon näyttämään tältä :
<?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) );
Sen jälkeen voit vapaasti käyttää sitä. Muista kuitenkin, että meidän on silti varmistettava, että palautetut arvot ovat liukulukuarvoja.
Tietojen vahvistaminen
Nyt kun meillä on tiedot, meidän on varmistettava, että se näyttää hyvältä. Ja jos ei, meidän on käsiteltävä se asianmukaisesti. Jos ei, voimme yksinkertaisesti:
- palauttaa false funktiosta, josta se sisältyy,
- tehdä poikkeus ja antaa soittajan käsitellä sitä parhaaksi katsomallaan tavalla.
Jokainen näistä esimerkeistä voi näyttää tältä :
<?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.');
}
Viime kädessä päätät kuitenkin, kuinka arvot käsitellään, kun ne eivät ole oikeassa muodossa jäsennyttyäsi ne.
Ovatko nämä parhaita käytäntöjä?
Rehellisesti sanottuna epäilen. Tiedän, että nämä ovat asioita, joita olen käyttänyt ja joista olen löytänyt hyötyä. Se tarjoaa myös puolustavan, joustavan tavan varmistaa, että arvosi ovat oikeat.
Mutta jos on olemassa parempia tapoja tehdä tämä, olen avoin kuulemaan ne kommenteissa.