Dans un script PHP tout comme dans la plupart de langage de programmation, une variable à un cycle de vie. Sa création, définition ou déclaration

Son affectation ou initialisation

Sa destruction

De sa déclaration à sa destruction, une variable peut subir plusieurs actions.

  • Elle peut être redéfinie
  • Elle peut être modifiée
  • Elle peut être affichée
  • Etc…

Mais tant bien même définie dans un script ou un fichier PHP, une variable a une portée, c’est-à-dire une variable a l’endroit où elle peut être utilisée et un autre où elle est inconnue ou indéfinie même si elle était définie précédemment.

Ces endroits, c’est ce que je vous propose de découvrir dans la suite de cet article. Cela nous amène à une notion de la programmation qu’on appelle la portée de variable .

Sorte de variable

En PHP, il y a de manière générale 3 sortes de variable :

  • Variable locale : Sont des variables définies et disponible que dans une fonction, closure ou méthode
  • Variable globale : Sont des variables définies et disponibles en dehors d’une fonction.
  • Variable super globale : Sont des variables définies et disponible partout. A l’intérieur ou à l’extérieur d’une fonction.

Variable locale

Les variables globales sont celles qui sont définies dans une fonction, un closure ou méthode. La portée de ces variables sont donc locales, c’est-à-dire qu’ils ne peuvent être utilisées que dans le scope (entre accolade) de cette fonction.

Dans cet exemple, la variable $b est locale (disponible que dans la fonction a) et il y a deux variables $a, celle locale qui égale 5 et l’autre qui est globale qui équivaut à 1 ;

Variable globale

Une variable globale est celle qui est accessible partout dans un script PHP sauf dans des méthodes, fonctions ou closures. C’est à peu près le contraire des variables locales.

Cependant, il est possible d’avoir accès aux variables globales à l’intérieur d’une fonction. Deux choix nous est possibles :

Via le mot clé global

 

Via la variable $GLOBALS

Toutes les variables déclarées dans un script PHP sont aussi ajoutées dans la variable $GLOBALS qui est un tableau associatif où les clés sont les noms de variables et les valeurs sont les valeurs de ces variables.

Exemple :

Va afficher

Ce qui veut dire qu’on peut très bien récupérer la valeur d’une variable déclarée à l’extérieur d’une fonction vu que $GLOBALS est une variable super globale dont on en parle dans le prochain point

Variable super globale

Les variables super globale sont celles qui sont accessible partout dans un script PHP. Elles font partie des variables prédéfinies. Elles sont donc au nombre de 9 :

  1. $GLOBALS Contient toutes les variables globales et super globales définie dans un script. On en a parlé
  2. $_SERVER Contient les informations sur le serveur telle que l’IP du serveur et l’exécution du fichier PHP telle que le nom du fichier PHP
  3. $_GET Contient toutes les variables passées dans un url. ex : index.php?variable1=valeur1&variable2=valeur2
  4. $_POST Contient toutes les données envoyées par la méthode POST, le cas de formulaire HTML.
  5. $_FILES Contient tous les fichiers soumis par les formulaires.
  6. $_COOKIE Contient tous les cookies définis à l’aide de la fonction setcookie()
  7. $_SESSION Contient tous les sessions définis
  8. $_REQUEST Contient les contenus de $_GET, $_POST et $_COOKIE
  9. $_ENV

Ces variables peuvent être appelées n’importe où dans un script PHP.

Et prend fin cet article, j’espère qu’il ne vous a pas autant ennuyer, pour n’importe quelle question, je vous répond aux commentaires.

Partant de Personnal Home Page, à PHP/FI (Personnal Home Page Interactive Form) pour arriver à Php HyperProcessor, Le langage PHP n’a subi que des ajouts et améliorations de fonctionnalités du jour au lendemain. Ces ajouts et améliorations sont si fréquents qu’apprendre hier nous pousse à apprendre aujourd’hui pour être à jour même pour ceux qui ont déjà un niveau avancé.
Dans cet article, je vous parle des astuces PHP que peu de monde connaisse et je parie que vous les en connaissez pas même si vous avez déjà un niveau avancé en ce langage.

Opérateur d’exponentiation

Pour effectuer un calcul exponentiel en PHP, l’habitude courant est d’utiliser la fonction pow()

Il y a un opérateur ** ajouté depuis la version 5.6 de PHP qui permet de faire simple à l’instar de +, *.

L’opérateur Null-coalescence

Un code du genre, l’aviez-vous déjà fait ? Oui, j’en suis sûr !

Avec l’opérateur null coalescence qui est disponible qu’à partir de la version 7 PHP, la syntaxe de ce code est beaucoup plus simplifiée.

Et il est possible d’enchainer l’opérateur null-coalescence comme suit

 

Heredoc et Nowdoc

Hormis le simple et double guillemet, Il existe deux autres manières de délimiter une chaine de caractère en PHP que peu de gens connaissent. Sans surprise ce sont donc la syntaxe Heredoc et Nowdoc

Heredoc

La syntaxe heredoc est constituée de 3 signes d’infériorité (<<<) suivis d’un identifiant et d’une nouvelle ligne. L’identifiant servira de marquer la fin de la chaine suivi d’un point-virgule.

Le marquage de fin doit être au début de la ligne et ne doit être suivi d’aucun texte c-a-d, il  doit être seul dans une ligne.

Nowdoc

Nowdoc est similaire à herefoc, avec une simple différence que l’identifiant délimiteur doit être entouré d’un simple quotte et aucune interprétation de variable ou quoi que ce soit se fait.

Type de valeur de retour d’une fonction ou méthode

Ceux qui viennent de C ou Java savent de quoi je parle. PHP permet de faire omission de type de valeur de retour d’une fonction ou méthode. Cela ne veut pas dire qu’il ne le permet pas. Voici comment déterminer le type de valeur de retour d’une fonction

Et quand le type de valeur de retour ne correspond pas à ce qui était indiqué, une erreur fatale est invoquée.

Les variables dynamiques

Déclarer une variable en PHP, quel jeu d’enfant, juste un signe $ précédé du nom qu’on veut donner à la variable. Mais PHP permet aussi de déclarer dynamiquement une variable.

La valeur de $a ‘bonjour’ est utilisée comme nom de la variable. Dans $$a, $a est d’abord interprété, ce qui équivaut à ‘bonjour’ puis est utilisé comme déclaration de la variable $bonjour = ‘monde’. Dans echo ${$a}, $a est d’abord interprété après que sa valeur ‘bonjour’ soit utilisée pour afficher la valeur de $bonjour.

Importation des fonctions et constantes d’un namesapce

Avec l’utilisation des namespaces en PHP, on importe facilement une classe d’un namespace donné avec l’utilisation de l’opérateur use.

Quid de l’utilisation d’une fonction ou d’un constant d’un namespace donné ? Et ben il y a use function et use const.

 

Mutation de valeur de deux variables

Soit deux variables :

Si je veux affecter la valeur de $a dans $b et vice versa, Il faut

Je peux faire simple avec une affectation par décomposition

Enfin, PHP est actuellement dans sa 7ème qui a déjà subie plusieurs révisions. Se mettre à jour est le moyen le plus simple pour rester à jour parce que tout bouge vite. Que d’entre ces astuces connaissiez-vous avant ? Partagez aussi vos astuces dans le commentaire.

Le formulaire dans le web est le moyen le plus utilisé pour transmettre et/ou interagir avec [les données] utilisateurs. Cependant, PHP étant un langage permissif, les débutants en ce langage commettent des graves erreurs quant au traitement et la validation de formulaire.

Même si on peut valider les données avec HTML5 sans JavaScript, Never trust user input reste toujours l’expression utilisée pour dire simplement qu’il faut toujours valider les données provenant des utilisateurs hormis les traiter. Si vous demandez un numéro de téléphone, vous devriez vous rassurer à 100% que la donnée fournie correspond ou est un numéro de téléphone avant de l’enregistrer ou l’utiliser.

La logique dans la validation d’un formulaire coté serveur  reste simple :

  1. Récupération des données utilisateur
  2. Vérification des données utilisateurs
  3. Si les données sont valides, on effectue l’opération prévue sur celles-ci
  4. Si non, on le renvoie dans la page de formulaire avec l’affichage des erreurs

La plus part du temps, ce qui rend difficile tout ce processus pour un développeur PHP débutant, c’est le manque d’une structure homogène et cohérente de validation de ses données.

Découvrons dans la suite comment traiter et valider proprement un formulaire avec PHP tout en se servant de la programmation défensive d’abord en scratch pour mieux comprendre comment ça marche et après je vous montrerai les librairies à utiliser pour gagner en productivité.

Exemple de guide

Pour ce tuto, nous allons valider un formulaire qu’on rencontre fréquemment sur la toile, le formulaire d’un commentaire. Celui-ci a comme champ :

  • Nom : Qui ne peut être vide, peut contenir des chiffres et des lettres mais pas caractères spéciaux et est obligatoire.
  • Email : Qui est obligatoire et doit correspondre à un email valide
  • Url : Qui est facultatif mais quand c’est renseigné, il doit correspondre à un url valide
  • Message : Qui ne peut être vide et est donc obligatoire

Pour chaque invalidité d’un champ, la cause de cette invalidité doit être mentionnée.

Formulaire en HTML

Je valide mon formulaire dans le même fichier que mon formulaire pour rester simple. Voici pour l’instant juste le formulaire

 

Rien de bien compliquer ici si ce n’est que l’utilisation de la fonction show_error() que je veux expliquer quand je veux la créer.

Traitement PHP

Je veux placer mon script PHP juste avant la déclaration de DOCTYPE. La logique de mon traitement est tout de même aussi simple. J’ai une variable de type array $errors que j’aurais à remplir avec comme clé, l’attribut name du champ et comme valeur, le message d’erreur à chaque fois qu’il y a erreur. (Je veux revenir)

D’abord je crée la fonction show_error() qu’on a vu précédemment qui prend comme argument la valeur de l’attribut name de chaque input. Cela me permet de récupérer directement le message d’erreur depuis la variable $errors et de l’afficher.

Ma fonction n’est pas si compliqué que ça, une condition ternaire pour ne rien afficher si la clé $key n’existe pas dans le tableau $errors

Après je commence la validation des données.

Rien de bien compliqué non plus ici, juste des simples conditions mais au passage, j’ai utilisé la fonction filter_var pour valider l’url et l’email et preg_match à travers une expression régulière.

Et au final, je peux savoir facilement si les données sont valides qu’en vérifiant si la variable $errors est vide et je peux effectuer l’opération prévue pour celles-ci.

[Télécharger le code complet]

Allez plus loin

La manière qu’on a procédée est très loin d’être plus mieux. Voici les améliorations possibles que vous pouvez faire

  • Pré emplir le formulaire en cas d’erreur avec les données précédemment entrée.
  • Respecter l’architecture MVC, en subdivisant le formulaire avec un Controller et une Vue. Et si l’opération à effectuer après validation est de stocker ces données dans la base de données, disposez aussi d’un modèle, un fichier où vous allez déclarer les fonctions qui vont exécuter toutes les requêtes SQL pour la table X, que vous auriez à appeler depuis le Controller

Utilisation des librairies

Si vous avez compris la logique de validation d’un formulaire, inutile de gaspiller beaucoup de temps à écrire les contraintes des données, la grande communauté de PHP a fait quasi tout ce qu’il faut pour valider rapidement et efficacement les données issues d’un formulaire à travers différentes librairies

GUMP

Gump est une librairie très pratique pour valider les données issues d’un formulaire. Il peut aussi être chargé via composer. Voici une utilisation très basique (notre exemple précédent)

VALITRON

Valitron est aussi une librairie de validation des données PHP qui a l’ère d’être très pratique aussi. En quelque ligne de code, vous validez beaucoup de données.

Finalement, chacun cultive sa manière de faire les choses, si vous n’avez pas encore une manière stricte de valider vos formulaire sans doute celle ci, mais si vous en avez déjà, faites le pour et le contre.

Jetbrains PHPStorm est un environnement de développement intégré spécialisé pour le développement Web. Initialement conçu pour le développement PHP avec tout le support de Webstorm, grâce à son extensibilité, plusieurs plugins existent pour étendre ses fonctionnalités. Il supporte nativement les langages PHP, HTML, CSS et JavaScript.

AVANTAGES ET FONCTIONNALITES

Si plusieurs développeurs Web se penchent vers cet IDE, c’est grâce aux nombreux avantages et fonctionnalités que possède PHPStorm qui rendent vraiment facile la vie des développeurs en occurrence :

  1. Le support de la coloration syntaxique
  2. Un générateur de code
  3. L’auto complétion intelligent du code
  4. Une documentation du langage PHP intégré
  5. La factorisation du code
  6. File watcher, un outil qui fait la surveillance des fichiers surtout pour la transpilation des codes pour ceux qui utilisent des préprocesseurs comme SASS ou Webpack
  7. Un support de gestion de version (GIT, SVN) intégré
  8. Les supports des framework (Symfony) PHP intégré
  9. Les supports des moteurs de templates comme blade, twig intégré.

Et on est loin d’atteindre la moitié des fonctionnalités qu’offre cet IDE nativement… Il est quasi entièrement customisable et est très extensibles grâce aux nombreux plugins disponibles sur le web.

INCONVENANTS

Et que pensez-vous ? Que dans toutes ces features, il ne manquera pas de point faible ? Détrompez-vous ! PhpStorm est génial avec ces fonctionnalités mais cela lui rend gourmand en ressource mémoire. Il peut consommer jusqu’à 700Mo de mémoire vive.

Télécharger PhpStorm

PhpStorm n’est malheureusement pas gratuit, mais ils sont une version d’essaye d’une durée de 30 jours à voir dans le site officiel

SI vous avez commencé le développement web avec notepad++ comme c’est le cas de la plus part, c’est le moment de voir un peu plus grand et professionnel en migrant vers PHPStorm. Si vous ne voulez pas PhpStorm en raison de sa gourmandise, pensez à SublimText.