Magazine Focus Emploi

PHP, le langage pour les geeks et les directeurs techniques

Publié le 01 août 2012 par Abouchard

Ces derniers temps, on dirait qu’un nouveau sport international est apparu, dont la pratique consiste à dire pourquoi PHP est un mauvais langage (ici ou ) ou au contraire un bon langage de programmation (ici, ). J’avais décidé de ne pas participer à ce championnat, parce que c’est un peu stérile (et aussi parce que j’écris déjà suffisamment d’articles sur le PHP).

Mais finalement, j’ai changé d’idée. Non pas parce que j’ai soudainement envie de prendre la défense du PHP (tout le monde sait que c’est mon langage de prédilection), mais parce que je continue à m’intéresser aux différents langages de programmation ; et il me semble intéressant de partager avec vous quelques éléments qui ressortent de tout ça.

Le web d’abord

Ce n’est pas un scoop, PHP a été inventé pour créer des sites web. Ça fait très longtemps qu’on peut l’utiliser pour complètement autre chose (système de fichier redondé, interface graphique, …), comme n’importe quel langage de script. Mais c’est une réalité inscrite dans ses gènes.

Concrètement, cela se traduit par le fichier de configuration php.ini, qui offre − entre autres − la possibilité de définir la mémoire consommée lors de l’exécution d’une requête, ou la durée maximale d’un traitement. Ce genre de paramétrage est désormais possible avec Perl (grâce à mod_perl sous Apache), mais je n’ai pas trouvé d’équivalent exact avec Python ou Ruby (même en cherchant du côté de mod_python ou de FastCGI). Quoi qu’il en soit, cela explique pourquoi PHP a vite trouvé sa place dans les offres d’hébergement mutualisé.

Un langage qui évolue vite

De tous les principaux langages de programmation, je pense que PHP est celui qui évolue le plus vite. Si on regarde ce qu’il s’est passé ces 10 dernières années, il est indéniable que les concepteurs du langage ont fait un très gros effort d’amélioration et d’ajout de fonctionnalités.

En même temps, le code écrit il y a 10 ans a de grandes chances de fonctionner tel quel. Et l’ajout d’un modèle objet très complet, qui n’a plus à rougir d’aucun autre langage, n’empêche pas qu’il reste possible d’utiliser le PHP comme un simple langage de script procédural.

Les autres langages interprétés cherchent aussi à faire ce grand écart, mais j’ai l’impression que certains connaissent la double peine : ils n’évoluent pas très vite, et quand une version majeure est disponible, son taux d’adoption reste faible (Perl 6, Python 3).

Un langage qu’on connait déjà

Ce qui me semble être l’une des grandes forces du PHP, c’est qu’il emprunte la plupart de ses concepts à des langages très connus. Il suffit d’avoir des notions de C, C++, Java, Javascript, Perl ou Shell pour se sentir en territoire connu.

Le PHP n’est pas un langage académique ; il est rarement enseigné en écoles ou à l’université, au contraire de la plupart des langages sus-cités. Pouvoir passer de l’un à l’autre facilement a forcément contribué à augmenter le nombre de personnes qui développent en PHP. Même si le Python, le Ruby et le Lua font appels à des concepts très intéressants, ces mêmes concepts nécessitent parfois un reset mental qui peut faire un peu peur.

Un langage simple et souple

Les langages de script modernes partagent souvent la caractéristique d’avoir un typage dynamique, voire faible. Cela permet de développer plus rapidement qu’avec des langages à typage statique (souvent associé à un typage fort). Les détracteurs objectent que ça favorise l’écriture non-réfléchie de code, qui devient vite un plat de spaghetti, mais c’est très apprécié dans le cadre de développements incrémentaux.

Nous sommes d’accord que plus personne ne développe le moindre site web en C ou en C++. Dans les langages à typage fort, il me semble que le Java est le seul qui jouisse encore d’un certain prestige auprès des adeptes de méthodes agiles. Mais, de manière générale, la marche du progrès avance en direction des langages dynamiques (PHP, Python, Perl, Ruby, Lua, …).

Au passage, ce typage dynamique/faible facilite l’apprentissage de la programmation. Ce n’est peut-être pas formateur (au sens où le C peut l’être), car le langage lui-même ne force aucune bonne pratique ; on parle parfois de langages permissifs ou laxistes. Mais ça permet à n’importe qui de commencer à écrire un petit script, puis de l’étendre tranquillement tout en gagnant en compétence et en expérience.

Un langage professionnel

En écrivant ça, je prends un risque. Tous ceux qui déversent leur bile contre le PHP me rétorqueront que c’est un langage qui contient tellement d’incohérences qu’il est loin d’être paré pour un usage sérieux en entreprise.

Qu’est-ce qui fait qu’un langage de programmation apparaît assez « solide » pour être qualifié de professionnel ? Ceux qui codent en C/C++, Objective-C, Java, Pascal ou Ada mettent en avant le typage fort. Même en n’étant pas forcément complètement d’accord, je dois reconnaître que le risque de bugs diminue quand une variable doit être déclarée avant d’être utilisée, et qu’elle ne peut contenir que des données d’un type défini. Lorsque le code est explicite, il devient généralement plus verbeux, mais aussi plus stable. Plus fiable.

À ce niveau, PHP propose un choix un peu hybride. Comme on l’a vu plus haut, c’est à l’origine un langage à typage dynamique, plutôt axé sur la souplesse. Mais contrairement aux autres langages de ce genre, le PHP permet de définir le type des paramètres attendus par les fonctions et les méthodes. Cela reste totalement optionnel ; mais quand on veut écrire du code « rock-solid », on commence par blinder les entrées et les sorties des modules/objets/bibliothèques (appelez-les comme vous voulez) qui composent les programmes.

Donc, pour écrire du code de haut niveau, le PHP offre cette possibilité, qui devient très puissante quand on l’associe à la puissance du modèle objet. Quand on spécifie qu’un paramètre doit correspondre à un certain type d’objet ou d’interface, on est certain d’obtenir une donnée qui soit de ce type (ou qui en dérive).

Du côté du Perl, du Python, du Ruby ou du Lua, il n’est pas possible de typer les paramètres (sauf en Perl 6, qui est encore très peu utilisé). Dans ces langages, on utilise le duck typing : peu importe au final le type réel de la donnée, tant qu’elle présente les interfaces qu’on attend d’elle. Cette manière de faire est suffisante la plupart du temps ; mais quand on veut écrire du code stable et pérenne, ça peut ne pas être assez.

Des petits détails plaisants

Il y a quelques points de détails que je trouve plaisants dans le PHP. Là j’aborde les goûts et les couleurs, donc c’est forcément plus subjectif que les points précédents.

Pour commencer, la vraie force du PHP, ce sont ses tableaux polymorphes. Ils peuvent être utilisés comme de simples listes ou comme des tableaux associatifs, et surtout ils gardent l’ordre dans lequel les données ont été insérées. Par rapport aux dictionnaires de Python, par exemple, c’est très pratique (je sais qu’il existe le type OrderedDict, mais avoir par défaut un type de tableau multi-usage, c’est quand même très pratique).

La gestion de chaînes, et plus particulièrement la concaténation, hérite de ce qui se fait de mieux en la matière : le Perl. L’inclusion de variables dans les chaînes, ou même la présence d’un opérateur de concaténation différent de l’opérateur d’addition, rendent les choses très naturelles à l’utilisation. C’est idiot, mais dans la mesure où on l’utilise à longueur de journée (comme les tableaux), ça a son importance.

Autre détail, la gestion des namespaces est plutôt bien pensée. Au début je la trouvais étrange, comme beaucoup de gens. L’utilisation du caractère backslash comme séparateur de namespace a fait couler beaucoup d’encre, mais c’est finalement pas mal. Une des choses que j’apprécie, c’est qu’il est très pratique de faire commencer un nom par un backslash, pour indiquer clairement qu’il s’agit de la racine des espaces de nommage. Dans les autres langages (notamment le C++ et le Python qui utilisent le séparateur “::”), il y a parfois un peu de flou sur l’utilisation d’un sous-espace de nom, ou d’un espace de nom qui part de la racine.

Pour conclure

Je partage un certain nombre des critiques qui sont adressées à PHP. La bibliothèque standard ressemble à un gros fourre-tout. L’ordre des paramètres de cette bibliothèque standard n’est pas homogène. Le langage gère ses erreurs de deux manières différentes, alors qu’il ferait mieux de n’utiliser que les exceptions.

PHP offre l’avantage, relativement unique à mes yeux, d’être à la fois souple et facile d’accès, mais aussi d’offrir toutes les finesses d’un langage utilisable sur de gros projets.

Comme le disait récemment Rasmus Lerdorf (créateur de PHP) sur la mailing-list interne du langage :

One of the strengths of PHP is that it scales. It scales up to the largest sites in the world while at the same time it scales down to weekend warriors. Doing both in the same codebase is a challenge.

Ce qui pourrait être traduit par :
« Une des forces de PHP est qu’il s’adapte. Il s’adapte vers le haut pour les sites les plus importants du monde, tout en s’adaptant vers le bas pour les développeurs du dimanche. Réussir les deux avec la même base de code est un défi. »


Retour à La Une de Logo Paperblog

A propos de l’auteur


Abouchard 392 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog