Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

On vous a confiĂ© une base de code PHP, que vous l’ayez demandĂ©e ou non. Vous ouvrez le premier fichier, vous y trouvez $this->, des ->, des :: et une fonction qui s’appelle htmlspecialchars, et vous vous demandez si c’est bien le langage dont tout le monde vous a dit du mal.

En bonne partie, oui, mais pas celui d’aujourd’hui. Le PHP dont on vous a parlĂ© a existĂ©, et il a presque entiĂšrement disparu. Ce qui reste est un langage typĂ©, orientĂ© objet, avec ramasse-miettes, un gestionnaire de paquets, un style de code standardisĂ©, un Ă©cosystĂšme d’analyse statique sĂ©rieux, une version par an chaque novembre, et un modĂšle d’exĂ©cution qui ne ressemble Ă  rien de ce que vous avez utilisĂ© jusqu’ici. Ce modĂšle d’exĂ©cution est la seule chose que vous ayez vraiment Ă  apprendre.

Ce qui était vrai

PHP est nĂ© en 1995 comme un jeu de gabarits avec un peu de logique dedans, et pendant sa premiĂšre dĂ©cennie il a Ă©tĂ© permissif jusqu’à l’absurde. Les variables apparaissaient de nulle part, "abc" == 0 valait vrai, les erreurs s’imprimaient dans la page et l’exĂ©cution continuait, les requĂȘtes SQL se construisaient par concatĂ©nation, et la bibliothĂšque standard s’est assemblĂ©e une fonction Ă  la fois, au grĂ© des besoins de chacun, ce qui explique que strpos voisine avec str_replace et array_key_exists avec in_array.

Toute une gĂ©nĂ©ration a appris Ă  programmer sur ce PHP-lĂ , en a Ă©crit Ă©normĂ©ment, et une bonne partie de ce code tourne encore. C’est de ce PHP que parlent les blagues.

Ce qui a changé

PHP 7 (2015) a doublĂ© les performances et ajoutĂ© les dĂ©clarations de types scalaires. PHP 8 (2020) a apportĂ© un vrai systĂšme de types avec les types union, match, les arguments nommĂ©s, les attributs, les Ă©numĂ©rations, readonly, les callables de premiĂšre classe et un compilateur JIT. PHP 8.4 a ajoutĂ© les hooks de propriĂ©tĂ© et la visibilitĂ© asymĂ©trique, et PHP 8.5 un opĂ©rateur pipe. Dans le mĂȘme mouvement, les rĂšgles de comparaison ont Ă©tĂ© corrigĂ©es, les propriĂ©tĂ©s dynamiques dĂ©prĂ©ciĂ©es, les vieilles fonctions mysql_* supprimĂ©es, et l’interprĂ©teur lĂšve dĂ©sormais une TypeError lĂ  oĂč il devinait.

Deux Ă©lĂ©phants cĂŽte Ă  cĂŽte : Ă  gauche un vieil Ă©lĂ©phant poussiĂ©reux et rapiĂ©cĂ©, assis sur un tas de code spaghetti emmĂȘlĂ© ; Ă  droite un Ă©lĂ©phant moderne et Ă©lancĂ©, avec un nƓud papillon, debout sur des boĂźtes bien Ă©tiquetĂ©es

Autour du langage, la communautĂ© a construit Composer, le gestionnaire de paquets que tout projet utilise ; les standards du PHP-FIG, pour que les bibliothĂšques d’auteurs diffĂ©rents s’emboĂźtent ; PHPUnit et Pest pour les tests ; PHPStan et Psalm, deux analyseurs statiques qui vous donnent l’essentiel de ce qu’un compilateur donnerait ; et Rector, qui réécrit le vieux code en syntaxe moderne. Depuis 2021, la PHP Foundation salarie des dĂ©veloppeurs du cƓur du langage, pour que son avenir ne dĂ©pende plus des soirĂ©es de bĂ©nĂ©voles.

Ce qui pique encore

Tout n’a pas Ă©tĂ© corrigĂ©, et un livre pour gens pressĂ©s doit le dire d’emblĂ©e. Les chaĂźnes sont des suites d’octets, donc strlen('Ă©') vaut 2 et il vous faut les fonctions mb_ dĂšs qu’il s’agit de texte. La bibliothĂšque standard garde ses noms et ses ordres d’arguments incohĂ©rents, == convertit toujours ses opĂ©randes, quoique bien moins sauvagement qu’avant, le typage strict est un interrupteur par fichier qu’il faut activer, les tableaux se copient Ă  l’affectation, et le langage lui-mĂȘme n’a pas de gĂ©nĂ©riques. Chacun de ces points a une pratique moderne qui le neutralise, et chacun est traitĂ© au chapitre oĂč vous le rencontrerez.

La rĂ©putation de PHP est restĂ©e en 2010, alors que le langage a continuĂ© d’avancer.

L’idĂ©e Ă  saisir en premier

Une requĂȘte web PHP dĂ©marre sans rien, exĂ©cute votre code de haut en bas, envoie sa rĂ©ponse et jette tout. Il n’y a pas de mĂ©moire partagĂ©e entre les requĂȘtes, pas d’objet application qui reste en vie, pas de boucle d’évĂ©nements et pas de threads : le serveur web tend une requĂȘte Ă  PHP, PHP produit une rĂ©ponse, puis oublie tout ce qu’il vient de faire.

Si vous venez de Node, de Java, de Go ou d’un serveur Python ASGI, c’est la diffĂ©rence la plus importante, et la plupart des idiomes PHP en dĂ©coulent : l’absence de pool de connexions par dĂ©faut, « l’état global » qui n’est qu’une notion par requĂȘte, le plantage qui n’affecte qu’un visiteur, la montĂ©e en charge par ajout de processus, l’existence d’OPcache, et les serveurs PHP persistants comme FrankenPHP ou RoadRunner qui forment un sujet Ă  part entiĂšre. Comment PHP s’exĂ©cute traite tout cela, et c’est le seul chapitre Ă  ne pas sauter.

Comment lire ce livre

Chaque chapitre rĂ©pond Ă  une question et se suffit Ă  lui-mĂȘme. Les phrases en gras portent le fil : en ne lisant que celles-lĂ , vous obtenez le delta entre PHP et ce que vous connaissez dĂ©jĂ . Les blocs de code vous donnent la syntaxe, et le reste du texte est lĂ  pour le jour oĂč un dĂ©tail compte pour vous.

Les comparaisons avec Python, JavaScript, Java et quelques autres langages sont des points de repùre, pas des traductions, et vous pouvez sauter celles des langages que vous ne connaissez pas sans rien perdre de l’explication.

Chaque exemple tourne sur une installation nue de PHP avec php fichier.php, sans framework ni bibliothĂšque, pour que la leçon porte sur PHP lui-mĂȘme. Installez d’abord PHP : votre gestionnaire de paquets l’a, php.net liste les builds officiels, et l’image Docker officielle est php:8.5-cli. Gardez ensuite un terminal ouvert et exĂ©cutez ce que vous lisez.

Trois chapitres s’adressent Ă  un lecteur en particulier. Revenir Ă  PHP aprĂšs des annĂ©es fait correspondre les vieilles habitudes aux pratiques modernes, pour ceux qui reviennent au langage. Venir de Python, JavaScript ou Java est une table de correspondance, et PHP 8.0 Ă  8.5 en un coup d’Ɠil vous dit ce que la version PHP de votre projet sait faire.

Dans deux ou trois heures, la base de code que vous avez ouverte aura changĂ© d’aspect : pas forcĂ©ment plus simple, mais lisible.