PHP : la bonne pratique

Apprendre les bonnes pratiques de programmation en PHP


précédentsommairesuivant

III. Les points importants du langage

III-A. Les paradigmes de programmation

Le PHP est un langage flexible, dynamique supportant une variété de technique de programmation. Il a énormément évolué au cours des années en ajoutant notamment un solide modèle orienté objet avec PHP 5.0 (2004), les fonctions anonymes et les espaces de noms avec PHP 5.3 (2009) et les « traits » avec PHP 5.4 (2012).

III-A-1. Programmation orientée objet

Le PHP a un ensemble très complet de principes de programmation orientée objet en prenant en compte le support des classes, des classes abstraites, des interfaces, de l'héritage, des constructeurs, du clonage, des exceptions, etc.

III-A-2. Programmation fonctionnelle

Le PHP supporte les fonctions de « première classe » ce qui signifie qu'une fonction peut être affectée à une variable. Les fonctions définies par l'utilisateur ainsi que les fonctions intégrées au langage peuvent être référencées par une variable et invoquées dynamiquement. Les fonctions peuvent être passées en tant qu'argument à d'autres fonctions (on parle alors de fonctions d'ordre supérieur) et elles peuvent retourner d'autres fonctions.

La récursion est une fonctionnalité permettant à une fonction de s'appeler elle-même, cependant la plupart des fonctions PHP se concentrent sur la partie « itération ».

Les nouvelles fonctions anonymes avec le support pour les fermetures (closures en anglais) sont présentes depuis PHP 5.3 (2009).

Le PHP 5.4 a rajouté la possibilité de lier (« bind ») les fermetures à la portée d'un objet et a aussi amélioré le support pour les « callables » de façon à ce qu'elles puissent être utilisées aussi bien avec les fonctions anonymes (dans la plupart des cas).

III-A-3. Métaprogrammation

Le PHP supporte différentes formes de métaprogrammation à travers des mécanismes tels que l'API Reflection et les méthodes magiques. Il existe un grand nombre de méthodes magiques comme __get(), __set(), __clone(), __toString(), __invoke(), etc. permettant aux développeurs d'interférer avec le comportement d'une classe. Les développeurs Ruby répètent souvent que le PHP manque de method_missing, mais cela est pourtant disponible avec __call() and __callStatic().

III-B. Les espaces de noms

Comme mentionné plus haut, la communauté PHP a beaucoup de développeurs créant beaucoup de code. Cela signifie que le code d'une bibliothèque PHP peut utiliser le même nom de classe qu'une autre bibliothèque. Quand plusieurs bibliothèques sont utilisées dans le même espace de noms, il peut y avoir des collisions de noms ce qui pose problème.

Les espaces de noms résolvent ce problème. Comme décrit dans le manuel de référence PHP, les espaces de noms peuvent être comparés aux répertoires d'un système de fichiers. De même, deux classes PHP peuvent avoir le même nom si elles sont créées dans des espaces de noms distincts.

Il est important pour vous que vous utilisiez les espaces de noms dans votre code. Ainsi vous et d'autres développeurs pourrez utiliser ce code sans crainte d'entrer en collision avec d'autres bibliothèques.

Une bonne manière d'utiliser les espaces de noms se trouve dans PSR-0 qui vise à fournir un fichier standard, une convention pour les classes et les espaces de noms pour permettre d'avoir du code « plug-and-play ».

En décembre 2013, le PHP-FIG a créé un nouveau standard d'autochargement: PSR-4, qui un jour va probablement remplacer PSR-0. Pour le moment, les deux sont utilisables étant donné que PSR-4 ne tourne que sur PHP 5.3+ et que beaucoup de projets implémentent PSR-0. Si vous allez utiliser un standard d'autochargement pour une nouvelle application ou un paquetage alors vous devriez certainement voir du côté de PSR-4.

III-C. La bibliothèque PHP standard

La bibliothèque standard PHP (SPL en anglais) est fournie avec PHP et donne accès à une collection de classes et d'interfaces. Elle est composée de classes permettant de manipuler les structures de données les plus courantes comme les piles (stack), les files (queue), le tas (heap) et des itérateurs qui peuvent parcourir ces structures ou vos propres classes implémentant les interfaces SPL.

En savoir plus sur la SPL

III-D. L'interface en ligne de commande

Le PHP a été créé principalement pour écrire des applications web, mais il peut être tout aussi utile pour écrire des programmes en ligne de commande (command line interface ou CLI en anglais). Ces programmes peuvent vous aider à automatiser les tâches les plus courantes comme les tests, le déploiement et l'administration du site.

Les programmes PHP CLI sont puissants, car vous pouvez directement utiliser le code de votre application sans avoir à créer et à réaliser une interface web « sécurisée ». Faites juste attention à ne pas mettre vos scripts PHP à la racine de votre répertoire web public.

Essayez de faire tourner PHP en ligne de commande: > php -i

L'option -i va afficher votre configuration exactement comme la fonction phpinfo.

L'option -a fournit un terminal interactif similaire aux terminaux Ruby (IRB) et Python. Il existe par ailleurs d'autres options utiles.

Écrivons un simple programme CLI « Hello, $nom ». Pour faire vos essais, créez un fichier nommé hello.php et écrivez le code ci-dessous.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
<?php
if ($argc != 2) {
    echo "Usage: php hello.php [nom].\n";
    exit(1);
}
$nom = $argv[1];
echo "Hello, $nom\n";

Le PHP crée deux variables spéciales basées sur les paramètres passés au script. La variable $argc est un entier contenant le nombre de paramètres et $argv est un tableau contenant chacune des valeurs des paramètres. Le premier paramètre est toujours le nom du script PHP, dans notre cas hello.php.

L'expression exit() est utilisée avec un nombre différent de zéro pour indiquer au terminal que la commande a échoué. Les codes de sortie les plus communs se trouvent ici.

Pour exécuter le script ci-dessus depuis le terminal :

 
Sélectionnez
1.
2.
3.
4.
> php hello.php
Usage: php hello.php [nom]
> php hello.php world
Hello, world

III-E. XDebug

Un des outils les plus utiles dans le développement logiciel est un bon débogueur. Il vous permet de tracer l'exécution de votre code et de surveiller le contenu de la pile. XDebug, le débogueur de PHP, peut être utilisé par de nombreux EDI pour fournir des fonctionnalités telles que les points d'arrêt ou l'inspection de la pile. Il permet aussi à des outils comme PHPUnit et KCacheGrind de faire de l'analyse pour la couverture de code et du « profiling ».

Si vous vous trouvez dans une closure, que vous avez recours à var_dump/print_r et que vous ne trouvez toujours pas de solution - alors vous devriez utiliser un débogueur.

Installer XDebug peut se révéler compliqué, mais l'une des fonctionnalités les plus importantes est le « débogage à distance » - Si vous développez du code localement et que vous testez ensuite sur une machine virtuelle, voire un autre serveur alors le débogage à distance vous permettra de la faire sans problème.

Traditionnellement, vous allez modifier votre fichier VHost Apache ou votre .htaccess avec les valeurs suivantes :

 
Sélectionnez
1.
2.
php_value xdebug.remote_host=192.168.?.?
php_value xdebug.remote_port=9000

Le « remote host » et « remote port » correspondent à l'IP de votre ordinateur et au port sur lequel votre EDI va écouter. Il suffit alors de configurer votre EDI pour écouter sur le port choisi et de charger l'URL :

 
Sélectionnez
1.
http://votre-site.exemple.com/index.php?XDEBUG_SESSION_START=1

Votre EDI va maintenant intercepter l'état courant au fur et à mesure que le script s'exécute vous permettant de mettre des points d'arrêt et d'inspecter les valeurs en mémoire.

Les débogueurs graphiques permettent de se déplacer très facilement dans le code, d'inspecter les variables et d'évaluer du code à l'exécution. Beaucoup d'EDI ont un support intégré ou via un plugin pour le débogage avec xdebug. MacGDBp est un xdebug gratuit, open source pour Mac.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Josh Lockhart et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.