Dans les articles précédents, j’ai beaucoup écrit sur l’utilisation de l’ API Google Maps. Honnêtement, je n’ai pas travaillé avec depuis ce poste.
Cependant, j’ai dû travailler avec la latitude et la longitude en PHP, et j’ai commencé à utiliser certaines pratiques qui, je pense, peuvent bien nous servir lorsque nous travaillons avec des coordonnées ou des valeurs à virgule flottante, en général.
Dans le morceau de code suivant, je décomposerai l’approche que j’ai utilisée et pourquoi je l’ai fait. Mais je tiens à préciser que si vous lisez ceci en relation avec l’API Google Maps, je ne peux pas vous proposer grand-chose sur la manière dont cela fonctionne et la version actuelle de leur API.
Latitude et longitude en PHP
Chaque fois que vous travaillez avec la latitude et la longitude en PHP, vous travaillez avec des valeurs à virgule flottante, n’est-ce pas ? Donc, vous ne voulez jamais les analyser en rien de moins que cela; sinon, vous perdez des données et vous ne pourrez pas localiser ce que vous essayez de localiser.
Donc, à toutes fins utiles, supposons que vous ayez des informations entrant dans le serveur et que vous deviez les utiliser en utilisant PHP.
Les deux choses dont vous voulez vous souvenir sont :
- assainir les données entrantes,
- assurez-vous qu’il est converti en une valeur à virgule flottante.
Cela peut être fait en utilisant les fonctions PHP filter_var et floatval dont je parlerai dans un instant. Notez cependant que si le résultat de floatval ne renvoie pas de virgule flottante, vous devez disposer d’une manière élégante de gérer cela.
Selon le manuel, floatval peut renvoyer ce qui suit :
La valeur flottante de la variable donnée. Les tableaux vides renvoient 0, les tableaux non vides renvoient 1. Les chaînes renverront très probablement 0, bien que cela dépende des caractères les plus à gauche de la chaîne. Les règles communes du lancer au flotteur s’appliquent.
Nous verrons comment gérer cela plus gracieusement plus tard dans le post.
Analyse de la latitude et de la longitude entrantes
Supposons que les valeurs entrantes se trouvent dans la collection $_REQUEST de PHP (qui fait référence aux requêtes HTTP entrant dans le serveur) sous la forme acme-demo-latitude et acme-demo-longitude.
On peut les récupérer comme ceci :
<?php
$latitude = $_REQUEST['acme-demo-latitude'];
$longitude = $_REQUEST['acme-demo-longitude'];
Mais cela ne suffit pas. Tout d’abord, nous devons utiliser filter_var pour nous assurer que les données sont nettoyées et suivent le schéma à virgule flottante :
<?php
$latitude = filter_var(
$_REQUEST['acme-demo-latitude'],
FILTER_SANITIZE_NUMBER_FLOAT
);
$longitude = filter_var(
$_REQUEST['acme-demo-longitude'],
FILTER_SANITIZE_NUMBER_FLOAT
);
Ensuite, je trouve utile d’utiliser floatval pour analyser le résultat en tant que valeur à virgule flottante. Cela laisse le bloc de code suivant ressemblant à ceci :
<?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) );
Après quoi, vous êtes libre de l’utiliser. Mais rappelez-vous, nous devons toujours nous assurer que les valeurs renvoyées sont des valeurs à virgule flottante.
Validation des données
Maintenant que nous avons l’information, nous devons nous assurer qu’elle semble bonne. Et si ce n’est pas le cas, nous devons le gérer de manière appropriée. Si ce n’est pas le cas, nous pouvons simplement :
- renvoie false de la fonction dont il est contenu,
- lève une exception et permet à l’appelant de la gérer comme bon lui semble.
Chacun de ces exemples peut ressembler à ceci :
<?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.');
}
En fin de compte, cependant, la décision vous appartient sur la façon de gérer les valeurs lorsqu’elles ne sont pas dans le bon format une fois les avoir analysées.
S’agit-il de meilleures pratiques ?
Pour être honnête, j’en doute. Je sais que ce sont les choses que j’ai utilisées et que j’ai trouvées utiles. Il fournit également un moyen défensif et résilient de vous assurer que vos valeurs sont correctes.
Mais s’il existe de meilleures façons de le faire, je suis prêt à les entendre dans les commentaires.