PHP Satan est un site humoristique et pédagogique dédié à PHPStan, un outil d'analyse statique pour PHP souvent surnommé ainsi par ses utilisateurs. Le site guide les développeurs à travers les défis de l'analyse de code, en commençant par les bases de l'installation et de la configuration, jusqu'à des concepts plus avancés comme la gestion des erreurs de type et l'optimisation des performances.
L'idée principale est d'aider les développeurs à comprendre et à corriger les erreurs détectées par PHPStan, notamment celles liées aux types de données. Le site explique le système de niveaux de PHPStan (de 0 à 10), chaque niveau étant plus strict que le précédent, et propose des solutions pour résoudre les erreurs courantes, comme l'utilisation de type hints ou le narrowing de types. Des conseils pratiques, comme l'augmentation de la mémoire allouée ou l'utilisation de flags en ligne de commande, sont également fournis pour optimiser l'analyse.
L’AFUP Day 2026 à Paris a réuni des professionnels de l’écosystème PHP autour de conférences axées sur l’intelligence artificielle, l’architecture et la productivité. L’événement a mis en lumière l’intégration croissante de l’IA dans les outils comme Symfony, avec des présentations sur les embeddings pour des recherches sémantiques et l’utilisation de LLM comme GitHub Copilot pour optimiser les workflows de développement.
Loïck Piera a présenté Castor, un task runner open source développé par JoliCode, tandis que Nicolas Grekas a exploré les avantages de Caddy et FrankenPHP pour moderniser la gestion des applications PHP, proposant une alternative au traditionnel PHP-FPM. Ces outils visent à améliorer la productivité et la durabilité des projets.
Enfin, des discussions ont porté sur les bonnes pratiques en matière de qualité de code, notamment avec PHPStan, et sur la nécessité de concilier fonctionnalité, pérennité et collaboration humaine pour garantir des logiciels robustes et évolutifs.
L’article explique comment mutualiser la configuration de quatre CRUDs (Post, Page, Category, Series) dans EasyAdmin grâce à un trait PHP, évitant ainsi la duplication de code. Les entités partagent une structure commune (statut, slug, planification, SEO, Schema.org) mais nécessitent des adaptations mineures, gérées par des branches conditionnelles basées sur leur FQCN. Le code est structuré en onglets (tabs) et ensembles de champs (fieldsets) pour améliorer la lisibilité, tandis que des helpers de visibilité (comme onlyOnForms ou hideOnIndex) permettent d’ajuster l’affichage selon le contexte.
L’auteur détaille l’utilisation de FormField::addTab et FormField::addFieldset pour organiser les champs de manière claire, puis extrait les sections récurrentes dans un trait (ContentFieldsTrait). Une branche conditionnelle gère les champs spécifiques à certaines entités (par exemple, la catégorie pour un Post), tandis que des types de champs comme AssociationField ou ChoiceField avec des enum natifs simplifient les relations et les sélections. L’objectif est de maintenir un code DRY (Don’t Repeat Yourself) tout en restant flexible.
Enfin, l’article mentionne les limites du trait et propose d’extraire certaines logiques en services si la complexité augmente. Il s’inscrit dans une série de six billets sur EasyAdmin, après des épisodes consacrés à l’installation, à la construction d’un menu ou à la sécurisation d’un admin. La méthode vise à éviter la divergence des configurations tout en gardant un code maintenable et lisible.
L’article explique comment sortir les outils de qualité de code PHP du vendor/ d’un projet Symfony en utilisant l’image Docker jakzal/phpqa, afin d’éviter les conflits de dépendances, les composer update plus lents et les divergences entre environnement local et CI. L’auteur remplace les dépendances require-dev classiques (PHPStan, Rector, PHP-CS-Fixer, Deptrac, etc.) par des exécutions one-shot dans un conteneur Docker contenant les binaires .phar, avec un tag d’image figé pour garantir la reproductibilité et un cache partagé /tmp pour accélérer fortement les analyses. Le workflow repose sur un Makefile séparant des contrôles rapides avant commit et des vérifications plus lourdes avant release, avec des cibles atomiques réutilisables individuellement. Certains cas restent toutefois hors du périmètre de jakzal/phpqa, notamment lint:container de Symfony, composer audit et Biome pour JS/TS. L’article souligne aussi les limites des outils non maintenus embarquant une ancienne version de nikic/php-parser, comme PHPMetrics ou PDepend, devenus incompatibles avec certaines nouveautés de PHP 8.4/8.5.
L’article partage des découvertes techniques récentes, notamment l’opérateur PHP match introduit dans la version 8.1, qui simplifie les correspondances de valeurs par rapport à un switch traditionnel, améliorant ainsi la lisibilité du code. L’auteure explore aussi des concepts TypeScript comme la différence entre as et satisfies, illustrant comment ce dernier offre une meilleure vérification des types à la compilation. Elle aborde également des réflexions sur les limites de TypeScript, soulignant l’importance de la validation des données au runtime et la pratique du parsing plutôt que de la simple validation pour renforcer la robustesse du code.
LLPhant est un framework PHP open source conçu pour simplifier le développement d'applications d'intelligence artificielle générative, inspiré par Langchain. Il prend en charge plusieurs modèles de langage (LLM) comme OpenAI, Anthropic, Mistral ou Ollama, et s'intègre avec Symfony et Laravel. Le projet vise à offrir une solution légère mais puissante, avec des outils pour manipuler des embeddings et des bases de données vectorielles.
Le framework est compatible avec PHP 8.1+, s'installe via Composer et propose une documentation complète. Il inclut des fonctionnalités comme le HumanInTheLoopTool pour des clarifications utilisateur initiées par l'IA, ainsi que des intégrations avec des services comme Pinecone ou MongoDB pour le stockage vectoriel.
Développé par Theodo et soutenu par des contributeurs, LLPhant est sous licence MIT et bénéficie d'une communauté active (1,6k étoiles, 159 forks). Des tutoriels et ressources externes, notamment en français, facilitent son adoption pour des projets comme des systèmes RAG ou des agents autonomes.
Les Fibers, introduites dans PHP en novembre 2021, sont une primitive bas niveau permettant un mécanisme de stack switch coopératif, souvent comparé à une suspension d'appel téléphonique où l'état complet (variables, pile d'appels) est préservé. Contrairement aux generators, elles permettent à n'importe quelle fonction, à n'importe quelle profondeur d'appel, de suspendre l'exécution via Fiber::suspend(), sans nécessiter une propagation manuelle du yield. Cette caractéristique est cruciale pour les bibliothèques asynchrones comme Amphp ou ReactPHP, qui encapsulent les Fibers pour offrir une API synchrone à l'utilisateur final, évitant ainsi le problème des colored functions.
Bien que souvent associées à tort au multi-threading ou à l'asynchrone pur, les Fibers restent mono-threadées et ne gèrent pas elles-mêmes les opérations d'entrée/sortie. Leur rôle se limite à fournir un outil de contrôle d'exécution précis, laissant aux bibliothèques le soin de gérer les attentes (sockets, timers, etc.). Leur minimalisme et leur explicitement en font une solution puissante mais peu visible dans le code applicatif classique, où elles opèrent en coulisses.
L'API des Fibers, volontairement épurée, repose sur quelques méthodes clés : Fiber::__construct(), Fiber::start(), Fiber::suspend() et Fiber::resume(). Cette simplicité reflète leur nature de mécanisme brut, conçu pour être intégré dans des couches d'abstraction supérieures plutôt que directement utilisé par les développeurs. Leur adoption discrète dans des frameworks comme Symfony s'explique par cette philosophie de conception.
L’article explique comment optimiser la gestion de gros fichiers JSON dans Symfony pour éviter les problèmes de mémoire, notamment l’OOM killer. L’idée principale repose sur l’utilisation du composant natif symfony/json-streamer de Symfony 7.4, qui permet de parser les données en flux continu plutôt que de charger l’intégralité du fichier en mémoire. Cette approche réduit drastiquement l’empreinte mémoire, évitant les pièges des méthodes traditionnelles comme json_decode() ou le Serializer, qui dupliquent les données en mémoire.
L’auteur détaille les mécanismes sous-jacents, comme le fonctionnement en DOM des méthodes classiques, qui consomment jusqu’à cinq fois plus de RAM que la taille du fichier initial. À l’inverse, le streaming lit les données octet par octet et ne conserve en mémoire que les éléments actuellement traités, grâce à des DTOs (Data Transfer Objects) typés et à l’attribut #[JsonStreamable]. Cette méthode est particulièrement adaptée aux fichiers de plusieurs gigaoctets ou aux webhooks massifs.
Pour implémenter cette solution, l’article recommande d’installer trois composants Symfony (json-streamer, type-info et object-mapper) et d’exploiter leur intégration native. L’architecture repose sur des Generators PHP, qui libèrent automatiquement la mémoire après traitement de chaque objet, garantissant une consommation constante et minimale.
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.