Bibliothèque · Notes de lecture

PHP 8 Objects, Patterns and Practice

De Matt Zandstra. Le livre qui sort le développeur PHP de « l'exil en userland » : les frameworks cessent d'être de la magie.

FR EN
Couverture de PHP 8 Objects, Patterns, and Practice, Matt Zandstra

PHP 8 Objects, Patterns, and Practice

PHP 8 Objects, Patterns, and Practice: Mastering OO Enhancements, Design Patterns, and Essential Development Tools

8 /10

« Le livre qui sort le développeur PHP de “l'exil en userland” : après lui, les frameworks ne sont plus de la magie. »

  • AuteurMatt Zandstra
  • Année2021 · Apress · 6e éd.
  • Pages833
  • Fiche~10 min de lecture
Notation du livre sur 5 dimensionsIdées8/10Applicable8/10Lisibilité7/10Actualité8/10Exemples8/10

La seule référence complète POO + design patterns en PHP, à jour PHP 8.

Pourquoi ce livre

Zandstra nomme la maladie dès son introduction : le développeur PHP qui vit dans un framework finit par « considérer les entrailles d'un framework comme de la magie avancée », son propre travail réduit à « un petit ornement posé sur une infrastructure imposante et inconnaissable ». Il appelle ça être relégué en userland : attendre que des gourous lointains corrigent les bugs, sans jamais comprendre la machine dans laquelle on habite.

Un petit développeur, éléphant PHP sur le sweat, tient un minuscule ornement décoratif au pied d'une tour colossale d'engrenages et de tuyaux aux fenêtres lumineuses habitées de silhouettes
L'exil en userland : poser son petit ornement au pied d'une infrastructure imposante et inconnaissable.

Le remède n'est pas de jeter Symfony ou Laravel. C'est de comprendre « les problèmes que les frameworks résolvent et les stratégies qu'ils emploient pour les résoudre ». C'est tout le livre, en trois parties qui lui donnent son titre : Objects (ce que PHP fait vraiment), Patterns (les stratégies, en PHP et pas en Java traduit), Practice (l'écosystème autour du code). Sixième édition, à jour PHP 8, écrite pendant trois confinements au coin de la table de la cuisine.

Les idées qui restent

1Les objets étaient une réflexion après coup, et ça explique beaucoup

« Beaucoup de projets PHP naissent petits et évoluent en monstres » (p. 3). Pour comprendre pourquoi, Zandstra raconte l'histoire du langage : les objets ont « un jour été décrits comme une réflexion après coup par les concepteurs de PHP » (p. 13). PHP 4 copiait les objets en silence à l'assignation : une génération de bugs sans message d'erreur. PHP 5 a réparé le modèle, PHP 7 l'a typé, PHP 8 l'a poli (constructeurs promus, arguments nommés, attributs). Le PHP moderne est méconnaissable, et c'est précisément pour ça qu'il fallait un livre qui fasse le pont entre le passé du langage et son présent.

2« J'avais surprivilégié l'héritage » : l'aveu qui ouvre les patterns

La partie patterns s'ouvre sur une confession : « j'ai découvert que j'avais surprivilégié l'héritage dans mes designs, en essayant de construire trop de fonctionnalités dans mes classes » (p. 254). Son exemple fil rouge : une classe Lesson avec deux axes de variation, le type de cours (magistral, séminaire) et la tarification (fixe, horaire). L'héritage force à multiplier les combinaisons ; chaque nouvel axe double l'arbre. La composition branche la tarification comme une pièce :

// ✗ une sous-classe par combinaison : ça double à chaque nouvel axe
CoursMagistralFixe, CoursMagistralHoraire, SeminaireFixe, SeminaireHoraire…

// ✓ la tarification est une pièce branchée (le vrai design du livre)
class Lesson {
    public function __construct(private CostStrategy $costStrategy) {}
    public function cost(): int {
        return $this->costStrategy->cost($this);  // délégation
    }
}

On échange TimedCostStrategy contre FixedCostStrategy à l'exécution, sans reconstruire d'arbre. Le principe GoF derrière, cité par le livre : « encapsulez le concept qui varie » (p. 269).

3La magie a des coûts cachés

PHP permet de tout intercepter : __get, __set, __call attrapent les accès à des propriétés et méthodes qui n'existent pas. Les frameworks s'en régalent. L'avertissement de Zandstra mérite d'être encadré : « la magie est arbitraire et inattendue. La magie plie les règles. La magie a des coûts cachés » (p. 136). Un objet plein de méthodes magiques ment à votre éditeur, à l'analyse statique, et au prochain lecteur. Même vigilance pour __clone : PHP copie les objets en surface, et un clone partage ses propriétés-objets avec l'original tant qu'on ne les clone pas à la main.

4Les quatre odeurs d'un design qui tourne mal

Le chapitre 6 est le cœur conceptuel de la partie Objects. Quatre signaux qu'un design réclame une reprise :

  • La duplication de code. La même routine éparpillée à plusieurs endroits : un changement oblige à toutes les retrouver.
  • La classe qui en savait trop. Une classe qui regarde des globales et des contextes au-delà du sien : elle ne peut ni voyager, ni être testée seule.
  • L'homme à tout faire. Une classe qui fait tout : chaque nouveau besoin la fait grossir elle, au lieu de faire grandir le système.
  • Les conditionnels répétés. Le même if/switch qui revient dans plusieurs méthodes : c'est une hiérarchie de types qui demande à exister. Le polymorphisme ne supprime pas le conditionnel, il le centralise en un seul endroit.

5Sa position contrariante : Service Locator d'abord

Là où la littérature moderne traite l'injection de dépendances comme un dogme, Zandstra la pèse en ingénieur. Le Singleton ? Dangereux si on en abuse, mais « je pense qu'un usage modéré du pattern Singleton peut améliorer le design d'un système » (p. 284), à déployer « avec parcimonie et précaution ». Les conteneurs d'injection complets ? « L'injection de dépendances offre la pureté, mais elle exige une autre forme d'adhésion : il faut croire à la magie de l'assembleur » (p. 329). Son choix à lui : « je préfère partir de la solution la plus simple et refactorer vers plus de complexité si besoin. Pour cette raison, j'opte généralement pour Service Locator » (p. 329). Pas obligé d'être d'accord ; un livre qui argumente au lieu de réciter vaut plus cher.

6L'anatomie de Doctrine, reconstruite à la main

Le chapitre 13 construit, pièce par pièce, ce que tout ORM PHP cache sous le capot. Le Data Mapper : une classe dont le seul métier est de faire circuler les données entre objets et tables, « la grande force de ce pattern est le fort découplage qu'il opère entre la couche domaine et la base de données » (p. 513). L'Identity Map : un registre qui garantit un seul objet par ligne de base, pas de double chargement. L'Unit of Work : le carnet qui note ce qui est neuf, modifié ou supprimé, et écrit tout à la fin. Le Lazy Load : la collection qui n'interroge la base qu'au premier accès. Lisez ce chapitre puis ouvrez les sources de Doctrine : vous reconnaîtrez chaque organe par son nom.

7Un mini-framework nommé woo, pour prouver qu'il n'y a pas de magie

Le chapitre 12 assemble les patterns d'entreprise en un petit framework que le livre appelle woo : un Front Controller qui reçoit toutes les requêtes, des commandes qui les interprètent (« les commandes sont une sorte de gare de triage », p. 443), un Application Controller qui choisit la vue suivante, un Domain Model qui ignore tout de la base. C'est un squelette de Symfony en miniature, construit sous vos yeux. Et Zandstra est honnête sur le prix : cette architecture « n'est pas pour les âmes sensibles : elle exige beaucoup de développement initial avant d'en voir les bénéfices » (p. 449). C'est exactement la raison d'être des frameworks : payer ce prix une fois, pour tout le monde.

8Le développement ne s'arrête pas au code

La troisième partie est une prise de position : savoir concevoir ne suffit pas, il faut l'écosystème qui rend la livraison répétable. « Le développement ne s'arrête pas au code » (ch. 14). Composer et le versionnage sémantique, Git, PHPUnit et les mocks, les standards (PSR-1, PSR-12, PSR-4), l'intégration continue. Les outils choisis en 2021 ont vieilli inégalement (Vagrant et Phing ont perdu face à Docker et GitHub Actions, Jenkins survit en entreprise), mais la thèse, elle, n'a pas pris une ride : un développeur qui maîtrise les objets et les patterns mais ne sait ni tester ni versionner n'est qu'à moitié développeur.

Trois choses que je ne savais pas avant de le lire

Mon avis, honnêtement

C'est le chaînon manquant de l'étagère PHP. Beaucoup de livres enseignent PHP, beaucoup enseignent les patterns en Java ; celui-là fait les deux à la fois, dans le langage qu'on déploie vraiment. Et Zandstra a une qualité devenue rare : il pèse au lieu de prêcher. Ses pages sur Service Locator contre injection de dépendances disent tout haut ce que beaucoup de seniors pensent tout bas : la pureté a un coût, et la solution la plus simple qui marche est un point de départ légitime.

Les réserves. C'est 833 pages, et la prose est plus appliquée que palpitante : c'est une référence qu'on travaille, pas un livre qu'on dévore. La partie Practice a vieilli là où elle nomme des outils (Vagrant, Phing, Jenkins) : lisez-la pour les principes, remplacez les outils vous-même. Et PHP 8.0 est le plafond : les enums, les propriétés readonly et les fibers sont arrivés juste après.

En 2026, ce livre a un public précis : le développeur PHP qui vit dans Laravel ou Symfony et qui sent bien que la magie doit s'arrêter quelque part. Le chapitre 13 à lui seul, lu à côté de la documentation de Doctrine, transforme un ORM de boîte noire en machine aux pièces nommées. Et quand l'IA génère votre PHP, les quatre odeurs de Zandstra sont exactement la grille de relecture.

Odilon

Toujours valable en 2026 ?

Les parties Objects et Patterns, intégralement : la composition, les odeurs, les patterns d'entreprise et de base de données sont intemporels, et la syntaxe PHP 8.0 est celle d'aujourd'hui. La partie Practice demande une substitution mentale : gardez les principes (dépendances, tests, CI, standards), changez les outils (Docker pour Vagrant, GitHub Actions pour Phing et Jenkins). Pas d'édition plus récente ; pour ce qui manque (enums, readonly, fibers), les notes de version de PHP complètent.

Pour qui ?

Lisez-le si

  • Vous écrivez du PHP tous les jours dans un framework et voulez comprendre ce qu'il fait à votre place
  • Vous sortez d'un cours de POO et cherchez le pont complet vers les patterns, en PHP et pas en Java traduit
  • Vous utilisez Doctrine ou Eloquent et voulez savoir ce qu'est vraiment un ORM
  • Vous relisez du PHP généré par IA : les quatre odeurs sont une grille toute prête

Passez si

  • Vous apprenez encore PHP lui-même : ce livre suppose le langage et enseigne la conception
  • Vous cherchez un manuel Laravel ou Symfony : il explique leur anatomie, pas leurs API
  • 800 pages de référence n'est pas votre format : Head First Design Patterns couvre la partie patterns avec plus de fun

Pour aller plus loin

Le cours PHP-POO de ce site pratique exactement les fondations de ce livre, et le cours POO couvre les principes de conception. Dans cette bibliothèque, Head First Design Patterns enseigne les mêmes patterns avec des canards et des pizzas, et Pro Git est précisément le livre que Zandstra recommande pour le versionnage.

Commentaires (0)

Voir toute la bibliothèque

D'autres fiches arrivent : un livre à la fois, la substantifique moelle seulement.