Découvrez comment transformer une application PHP en un binaire autonome grâce à des outils comme Box (pour créer un fichier .phar) et static-php-cli (pour générer un micro binaire minimaliste). L'auteur explique comment préparer son app pour la production, compiler le PHAR, puis fusionner le micro binaire avec l'archive pour obtenir un exécutable unique, sans dépendance PHP sur la machine cible. Une solution idéale pour simplifier la distribution d'outils CLI comme DTK, un automate de workflow Symfony.
L’article présente image-optimizer, un package PHP open source (via Composer) qui automatise la conversion des images (PNG/JPG) vers des formats modernes (AVIF, WebP) et génère des variantes responsive, réduisant significativement leur poids (jusqu’à 50% pour l’AVIF). Basé sur l’extension Imagick/ImageMagick, il s’intègre facilement dans les workflows Laravel, Symfony ou PHP vanilla. Une configuration simple permet de définir les dossiers sources/destinations, les qualités, les densités (retina) et les largeurs adaptatives. La commande vendor/bin/image-optimizer génère les images optimisées, avec des options comme --folder ou --force. L’article inclut un exemple de balise <picture> pour exploiter ces formats dans le HTML. Un gain de performance clé pour les sites web ! 🚀
Ce package PHP open source, installé via Composer, simplifie l'optimisation des fichiers de polices (TTF → WOFF2) en supprimant les glyphes inutiles et en compressant les fichiers. Idéal pour les projets web, il réduit drastiquement le poids des polices (ex. Roboto passe de 450 Ko à ~18 Ko) tout en conservant les caractères nécessaires. Installation facile avec composer require --dev uxcode-fr/font-optimizer, puis une commande CLI (vendor/bin/font-optimizer) génère les versions optimisées dans /public/fonts/. Configurable via un fichier PHP ou composer.json, il supporte aussi les polices variables et les Unicode personnalisés. Un must pour booster les performances Lighthouse ! 🚀
L'article explique le Decorator Pattern en PHP, une solution élégante pour ajouter des comportements à un objet sans modifier son code existant. L'auteur illustre les problèmes des classes "Dieu" (trop de responsabilités) et de l'héritage multiple avec des exemples concrets comme un système de logging. Le pattern permet de wrappper dynamiquement un objet (ex: FileLogger) dans des décorateurs (ex: DatabaseLogger, SlackLogger) pour étendre ses fonctionnalités, tout en gardant le code modulaire, testable et ouvert à l'extension. Une alternative propre aux cascades de sous-classes et aux couplages forts.
L’article de Dan Leech explique comment les collections en PHP améliorent la typage fort et la maintenabilité du code en encapsulant des logiques liées à des groupes d’objets (comme des files d’attente). Plutôt que d’utiliser des tableaux bruts, il propose des classes dédiées (ex: Queues) implémentant IteratorAggregate pour une itération propre, avec des méthodes comme at() pour un accès sécurisé aux éléments. L’auteur souligne que les collections, bien que sous-utilisées, permettent de mieux documenter les types et d’éviter les antipatterns (accès direct aux tableaux, absence de bibliothèques dédiées). Un exemple concret montre comment remplacer $queues[1] par $queues->at(1) pour des tests plus robustes.
L’auteur explique que les traits en PHP, bien que pratiques pour réutiliser du code, introduisent des problèmes majeurs : lisibilité réduite (comportement non évident), couplage caché (dépendance implicite aux propriétés protégées), encapsulation brisée et tests difficiles. Plutôt que de recourir aux traits, il recommande la composition, l’injection de dépendances ou des classes dédiées pour des architectures plus propres et maintenables. Un exemple concret montre comment remplacer un trait par une classe explicite (UserNotifier) pour clarifier les responsabilités. Une lecture utile pour éviter les pièges des traits au profit de bonnes pratiques SOLID.
Ce partage explique un pattern simple pour optimiser le tri d'array en PHP lorsque la clé de tri est coûteuse à calculer. L'auteur montre comment éviter de recalculer cette clé à chaque comparaison en utilisant un pattern en trois étapes : décorer, trier, et décorer à nouveau. Cette méthode, connue sous le nom de transform de Schwartz, réduit le nombre d'appels à la fonction coûteuse de O(n log n) à O(n). L'article propose également une astuce utilisant la fonction array_multisort() pour simplifier ce pattern en PHP.
Ce billet de blog explique le processus de refactoring de chaînes de caractères en énumérations (enums) dans le code de l'outil d'analyse statique Exakat. Initialement, les chaînes étaient utilisées partout, mais avec l'évolution de PHP, les enums offrent des avantages comme une meilleure typage, une structure dédiée et une analyse plus facile. Bien que les gains de performance ne soient pas significatifs, le passage aux enums simplifie l'analyse statique et améliore la précision. L'article détaille le choix des noms d'atomes comme candidats idéaux pour ce refactoring, en conservant la convention de nommage existante.
PHP 8.5, sorti le 20 novembre 2025, introduit une fonctionnalité permettant de simplifier la gestion des objets immuables en autorisant la mise à jour de propriétés lors du clonage. Cette amélioration facilite la création de nouvelles instances avec des valeurs modifiées, réduisant ainsi la complexité du code pour les objets immuables. Par exemple, la classe GPSLocation peut maintenant être clonée avec des propriétés spécifiques mises à jour, comme la latitude, la longitude ou l'altitude, sans avoir à recréer manuellement une nouvelle instance. #php #immuable #clone
Ce billet technique explore la transition des annotations vers les attributs PHP dans l'écosystème Symfony, soulignant les avantages des métadonnées natives introduites avec PHP 8. Les annotations, basées sur des commentaires DocBlocks, posaient des problèmes structurels comme l'absence de validation en temps réel, des performances médiocres et un refactoring risqué. Les attributs, en revanche, sont du code typé et performant, intégrés au langage et accessibles via la Reflection API. Symfony 8 utilise ces attributs pour simplifier l'injection de dépendances (Autowire), l'hydratation d'entités (MapEntity), la validation de payloads (MapRequestPayload) et la gestion de l'héritage (Override), réduisant ainsi la complexité du code et améliorant la maintenabilité.
Ce billet de blog explique comment rendre son terminal plus intelligent et productif grâce à des alias, des scripts et des intégrations. L'auteur partage ses astuces pour améliorer l'historique des commandes, l'autocomplétion, et l'utilisation de Docker avec FZF. Il montre également comment automatiser la gestion des versions de Node.js et PHP, rendant le terminal presque magique. Des exemples de code sont fournis pour illustrer chaque amélioration.
Ce billet explore l'évolution des shortcodes de WordPress, ces balises dynamiques comme [gallery id="123"], en les modernisant avec les standards de PHP 8.5 et Symfony 8. L'auteur, ayant travaillé sur l'intégration d'une galerie d'images dans un article Markdown, analyse les forces et faiblesses de l'API historique de WordPress, qui, malgré sa simplicité et son succès, présente des dettes techniques critiques : pollution de l'espace de noms global, absence de typage, vulnérabilités XSS, et couplage fort entravant les tests. La réponse à la problématique architecturale est affirmative : il est possible de reconstruire cette API en conservant son ergonomie tout en y insufflant fiabilité, sécurité et performances. L'article propose ainsi une modernisation des shortcodes pour une utilisation plus sûre et efficace.
Cet article explique comment vérifier simplement si deux plages horaires se chevauchent, un problème courant dans la gestion du temps. En illustrant les six possibilités de chevauchement avec un schéma, l'auteur montre que deux plages se chevauchent si la fin de la première est supérieure au début de la seconde et inversement. Un exemple de code PHP est fourni pour implémenter cette logique.
Ce billet de blog explique pourquoi l'auteur a remplacé les Makefiles par Castor, un task runner développé par JoliCode, pour automatiser ses projets PHP. Castor permet d'utiliser du PHP au lieu de scripts shell fragiles, offrant une meilleure expérience développeur avec autocomplétion, documentation et refactoring. L'auteur détaille comment Castor gère le démarrage du projet, en attendant intelligemment que la base de données soit prête, et montre un exemple de code pour illustrer ses propos.
L'article explique l'utilisation du type "never" introduit en PHP 8.1, qui indique qu'une fonction ne retournera jamais de valeur, soit en lançant une exception, soit en appelant exit ou die. Ce type ne peut être utilisé que comme type de retour et ne peut pas être combiné avec des types d'intersection ou d'union. L'auteur illustre son propos avec des exemples pratiques et met en garde contre les erreurs fatales si une fonction marquée "never" retourne implicitement ou explicitement une valeur.
Il s'agit d'un article pratique sur l’art de nommer les éléments en PHP. L’auteure y aborde l’importance des noms clairs dans le code, soulignant qu’ils réduisent la charge cognitive, améliorent la maintenabilité et facilitent l’onboarding des nouveaux développeurs. L’article propose des principes concrets, des conventions compatibles avec les PSR, et des exemples pour éviter les pièges courants liés à la liberté syntaxique de PHP (comme les tableaux dynamiques ou les objets flexibles). L’objectif ? Transformer le choix des noms en un processus réfléchi plutôt qu’en devinette, pour un code plus lisible et une architecture plus robuste.
Article réservé aux membres Medium.
Cet article explique comment Symfony utilise la classe ReflectionClass de PHP pour offrir sa flexibilité et son automatisation. Voici les points clés :
- Injection de dépendances : Symfony inspecte les constructeurs des classes via
ReflectionClasspour identifier et injecter automatiquement les dépendances typées, sans configuration manuelle. - Routing et contrôleurs : Grâce à la réflexion, Symfony lit les attributs de route (comme
#[Route]) et injecte dynamiquement les arguments des méthodes de contrôleur (ex. : récupération d’une entité depuis la base via leParamConverter). - Sérialisation : Le composant Serializer utilise la réflexion pour découvrir les propriétés et leurs types, permettant une conversion automatique entre objets et formats comme JSON/XML.
En résumé, la Reflection API est au cœur de la magie de Symfony, rendant possible l’injection de dépendances, le routage intelligent et la manipulation des données sans configuration statique.
L’article explique comment déployer des applications PHP sans interruption de service en utilisant la méthode blue-green : deux environnements identiques (blue et green) sont maintenus, l’un actif, l’autre en standby. Le déploiement consiste à installer la nouvelle version sur l’environnement inactif, à vérifier son bon fonctionnement, puis à basculer le trafic de manière instantanée et réversible (via un lien symbolique, un load balancer ou Kubernetes). Les avantages incluent un temps d’arrêt quasi nul et un retour arrière rapide en cas de problème. Pour PHP, il est crucial de centraliser les sessions (Redis/Memcached), les uploads (dossier partagé ou S3), et de gérer l’Opcache et les migrations de base de données avec la méthode "expand/contract" pour éviter les ruptures. L’article propose des scripts prêts à l’emploi pour un serveur unique avec Nginx/PHP-FPM, un load balancer ou des conteneurs, ainsi qu’une checklist pour un déploiement sécurisé, incluant des vérifications de santé et la gestion des caches. Les pièges courants (sessions perdues, caches obsolètes, migrations bloquantes) et des outils comme Deployer ou GitHub Actions sont aussi abordés, soulignant que cette approche transforme les déploiements en opérations sans stress.
Le Forum PHP 2025 a célébré les 30 ans de PHP, les 25 ans de l’AFUP, les 20 ans de Symfony et les 15 ans d’API Platform, avec des annonces et retours d’expérience marquants. Symfony 8 a été présenté avec ses évolutions (PHP 8.4 minimum, typage renforcé, suppression de code obsolète) et ses outils phares comme Flex, Autowiring ou Symfony AI. PHP 8.5 introduit notamment le pipe operator pour le chaînage de fonctions et des améliorations sur les URL et les emojis. L’IA était au cœur des discussions, avec des démonstrations du protocole MCP pour rendre les LLM capables d’agir via des outils serveurs, ainsi que des réflexions sur l’impact des IA génératives sur le métier de développeur. Des talks ont aussi mis en lumière des alternatives comme HTMX pour des applications dynamiques sans SPA, l’optimisation SQL face aux ORM, et des solutions pour la résilience des applications. Enfin, des retours sur la sécurité (WannaCry), l’accessibilité (RGAA) et l’embarquement de PHP dans des binaires autonomes ont complété ce panorama technique et inspirant. Une édition riche en innovations et en partage d’expertise pour la communauté PHP.
L’API Platform Conference 2025 célèbre les 10 ans du framework avec des annonces fortes et un double focus : performance extrême et expérience développeur (DX). Côté performance, l’intégration d’extensions PHP écrites en Go (via FrankenPHP) et le support natif de gRPC pour PHP ont volé la vedette, permettant des gains inédits en rapidité et stabilité, comme en témoigne l’adoption par Laravel Cloud. API Platform 4.2 a aussi été dévoilé, avec des outils comme l’ObjectMapper de Symfony pour simplifier la transformation d’objets et des gains de performance multipliés par 2 ou 3.
La deuxième journée a mis l’accent sur la DX : schémas JSON pour la configuration YAML dans Symfony, l’arrivée de PIE (remplaçant moderne de PECL), et des réflexions sur l’Agent Experience (AX) pour mieux collaborer avec les IA. Fabien Potencier a notamment proposé d’ajouter un fichier llms.txt pour faciliter l’intégration des LLM. Enfin, des conférences sur les feature flags, la contribution au cœur de PHP, et l’histoire des femmes dans la tech ont rappelé l’importance de l’humain et de l’outillage moderne. En résumé, PHP se réinvente comme un écosystème hybride, performant et centré sur les développeurs, invitant à tester FrankenPHP, adopter les nouvelles pratiques DevOps et repenser l’architecture des projets. Une édition résolument tournée vers l’avenir ! 🚀