PHP & Symfony en 2026 : la stack qui mérite l’attention des CTO
PHP 8.5 et Symfony 7 en 2026 : une stack complète — API Platform, Sylius, EasyAdmin, Mercure, Live Components, FrankenPHP. Prête pour les décisions de CTO sur API, SaaS, e‑commerce, mobile et IA.
§ sommaire
- 01Ce que j’ai vu se transformer en quatorze ans
- 02Le langage a rattrapé — et dépassé — ce qu’on en attendait
- 03Symfony : un écosystème qui couvre tout
- 04L’outillage qui rend la qualité industrielle
- Mentions spéciales
- 05FrankenPHP — la rupture qui change l’équation infra
- 06Front, mobile et temps réel sans empiler de stack JS
- 07L’IA côté produit : ce que change l’écosystème Symfony
- Quand PHP/Symfony est le bon choix en 2026
Quatorze ans de PHP. Une cinquantaine de projets menés depuis 2012 — de la petite application de gestion au SaaS complexe couvrant l’intégralité des processus métiers d’une usine, en passant par un projet e‑commerce from scratch ou encore de l’architecture hexagonale pour une néo‑banque. Un fil constant : Symfony.
Cet article n’a pas vocation à comparer ni à opposer les écosystèmes. Il propose un regard actuel, en 2026, depuis l’intérieur : celui d’un langage devenu strict et performant, d’un ensemble de frameworks capables de couvrir l’ensemble des besoins — API, SaaS, e‑commerce, back‑office, temps réel, mobile, IA —, d’un outillage mature, et d’une infrastructure qui a, discrètement mais définitivement, fait disparaître le débat sur la performance.
Je m’adresse ici aux CTO et lead tech en quête d’une vision claire et à jour de l’écosystème Symfony, ainsi qu’aux développeurs PHP qui souhaitent réévaluer le potentiel réel de leur stack. Ce qui suit n’est pas un plaidoyer, mais un retour d’expérience ancré dans le terrain.
Ce que j’ai vu se transformer en quatorze ans
Je travaille en PHP/Symfony depuis 2012. C’est une spécialisation assumée : à force d’enchaîner les projets dans le même écosystème, on développe une intuition qui rend chaque nouveau cadrage plus rapide, chaque livraison plus prévisible, chaque maintenance plus simple.
Ce n’est pas un choix d’opportunité — c’est ce qui permet, sur la plupart des projets que j’aborde, de livrer en quelques jours ce qui, sans cette maîtrise, prendrait souvent plusieurs semaines.
Sur ces quatorze ans, l’écosystème a connu plusieurs transformations qu’il faut regarder ensemble plutôt que séparément :
- Le langage est passé d’un terrain permissif à un environnement typé, strict et désormais rapide. PHP 8.5 n’a plus grand-chose à voir avec le PHP 5.3 du début de ma carrière.
- Symfony s’est imposé comme socle, puis a structuré un écosystème complet — API Platform, Sylius, UX Initiative, Mercure — couvrant la plupart des besoins sans avoir à assembler des briques disparates.
- L’outillage est devenu systémique : PHPStan, Rector, PHP CS Fixer, PHPUnit, Composer, Symfony CLI. La qualité ne repose plus uniquement sur la discipline individuelle, elle est intégrée au workflow.
- L’infrastructure a franchi un cap avec FrankenPHP en worker mode. La performance, longtemps perçue comme une faiblesse structurelle, n’est plus un sujet.
- Plus récemment, des initiatives comme Symfony UX, Symfony AI ou le bridge Hotwire Native étendent l’écosystème vers des terrains où on l’attendait moins : front réactif, apps IA-first, mobile.
Les sections qui suivent détaillent ces transformations telles que je les utilise réellement en production : le langage, les frameworks, l’outillage, l’infrastructure, le front et le mobile, puis l’IA.
En conclusion, une grille de lecture en cinq critères pour situer précisément les contextes où l’écosystème PHP est le plus pertinent.
Le langage a rattrapé — et dépassé — ce qu’on en attendait
Le PHP de 2026 n’a plus grand-chose à voir avec celui de 2012. La transformation s’est faite en deux ruptures, puis une phase d’accumulation. PHP 7.0 fin 2015 a refondu le moteur (Zend Engine 3) et acté un saut de performance d’environ ×2 sur des charges typiques. PHP 8.0 fin 2020 a posé le système de types moderne et introduit le JIT. Tout ce qui s’est ajouté depuis, de 8.1 à 8.5, relève de l’épaisseur, pas de la rupture.
Côté typage, sept versions ont transformé un langage permissif en un langage strict : Types scalaires (7.0), propriétés typées (7.4), unions et mixed (8.0), enums et intersections (8.1), readonly classes et DNF (8.2), constantes de classe typées (8.3), property hooks et visibilité asymétrique (8.4). Concrètement, aujourd’hui, une entité métier peut s’écrire ainsi :
final readonly class Order
{
public function __construct(
public OrderId $id,
public Status $status,
public private(set) array $lines = [],
) {}
public string $reference {
get => sprintf('ORD-%s-%s', $this->status->value, $this->id);
}
}
readonly sur la classe interdit la mutation des propriétés. private(set) (8.4) limite l’écriture à la classe tout en gardant la lecture publique. Le bloc
get => ... (property hook, 8.4) remplace le getter trivial. Le constructeur emporte déclaration et affectation des propriétés (constructor promotion, 8.0).
Cette densité d’expression est ce qu’un développeur Kotlin ou C# moderne attend, et elle est désormais native côté PHP.
Côté expressivité, les ajouts syntaxiques de la branche 8.x sont moins commentés, mais immédiatement visibles à la lecture. match (8.0) remplace switch
avec comparaison stricte et retour de valeur. L’opérateur nullsafe ?-> chaîne sans test null intermédiaire. Les attributs natifs #[Attribute] (8.0) ont
enterré les annotations docblock. Le pipe operator |> (8.5) fait passer une valeur de gauche à droite sans variables intermédiaires :
$slug = $title
|> trim(...)
|> mb_strtolower(...)
|> fn(string $s) => preg_replace('/[^a-z0-9]+/', '-', $s);
Pris isolément, chacun de ces ajouts est anodin. Cumulés, ils transforment la lecture d’un fichier PHP de 2026 par rapport à un fichier de 2018.
Côté performance, la base de PHP 8.x est déjà environ trois fois plus rapide que le PHP 7.4 que beaucoup ont en tête quand ils parlent de « lenteur PHP ». Le JIT IR introduit en 8.4 et raffiné en 8.5 ajoute 5 à 15 % sur les charges arithmétiques, en consommant moins de mémoire que le précédent backend. Sur des applications web typiques, IO-bound, le JIT seul ne change pas grand-chose ; c’est l’ensemble — moteur 7.0, JIT 8.0, IR 8.4/8.5, OPcache désormais compilé statiquement dans 8.5 — qui a effacé l’argument structurel de lenteur.
Côté asynchrone, les Fibers introduites en 8.1 sont stables depuis quatre versions majeures et utilisables en production via AmPHP ou
ReactPHP. L’ergonomie n’est pas celle d’async/await en JavaScript, mais le résultat fonctionnel est le même : gérer des I/O
concurrentes sans recourir aux threads.
Le langage que je présente à un junior aujourd’hui est plus proche d’un C# moderne ou d’un Kotlin que du PHP 5 qu’il imagine. Ça change complètement la nature du débat : on ne parle plus de savoir si PHP est robuste, mais dans quels cas il est le meilleur choix.
Symfony : un écosystème qui couvre tout
Symfony est mon socle de travail depuis Symfony 2 — modulaire, fortement typé, chaque composant utilisable indépendamment. Le vrai argument en 2026, c’est ce qui s’est construit autour.
Ces briques couvrent directement les besoins produits les plus courants :
| Besoin | Composant principal | Ce qui sort de la boîte |
|---|---|---|
| API REST / GraphQL | API Platform | CRUD générés, OpenAPI auto, filtres, pagination, sérialisation, GraphQL natif |
| E-commerce | Sylius | Catalogue, panier, checkout, taxes, promotions, multi-canal, multi-devise, headless |
| Back-office admin | EasyAdmin | CRUD complet sur entités Doctrine en quelques lignes, dashboard, filtres, exports |
| Temps réel | Mercure | Server-sent events, intégration native API Platform |
| UI réactive sans JS | Symfony UX Live Component | Composants Twig avec état serveur, mises à jour AJAX automatiques |
| Mobile (iOS/Android) | Turbo + Hotwire Native | App native qui réutilise le HTML serveur, sans React Native ni Flutter |
Et derrière, le framework lui-même repose sur plus de cinquante composants découplés, chacun installable indépendamment dans n’importe quel projet PHP. Le panorama, par domaine, donne la mesure de la couverture :
| Domaine | Composants |
|---|---|
| HTTP & routing | HttpFoundation, HttpKernel, HttpClient (sync/async/HTTP/2), Routing, Mime, WebLink |
| Console & runtime | Console, Process, Runtime, Dotenv |
| Configuration & DI | Config, DependencyInjection, OptionsResolver, Yaml, ExpressionLanguage |
| Sécurité | Security (Core/Bundle/Csrf/Http), PasswordHasher, RateLimiter, Lock, Semaphore, HtmlSanitizer, Ldap |
| Données & types | Validator, Serializer, Form, PropertyAccess, PropertyInfo, TypeInfo, ObjectMapper, JsonPath |
| Async & événements | Messenger, Scheduler, EventDispatcher, RemoteEvent, Webhook, Workflow (state machines) |
| Communication | Mailer (Amazon/SendGrid/Mailgun/Postmark/Brevo…), Notifier (SMS, push, Slack, Telegram, Discord…) |
| Cache & perf | Cache (PSR-6/16 + tags), Clock, Stopwatch |
| Filesystem & assets | Filesystem, Finder, Asset, AssetMapper (sans bundler ni Node) |
| I18n & identifiants | Translation, Intl, Emoji, Uid (UUID v1–v8, ULID) |
| Test & debug | BrowserKit, DomCrawler, CssSelector, Panther (Chrome/Firefox), VarDumper, VarExporter, ErrorHandler |
| Frontend (Symfony UX) | Turbo, LiveComponent, TwigComponent, Stimulus, Autocomplete, Icons, Chart.js, Map, React/Vue/Svelte |
| IA (depuis 2025) | AI Platform, AI Agent, AI Chat/Store, bridges OpenAI/Anthropic/Gemini/Mistral/Cohere, MCP Bundle |
Tout ce qui demande ailleurs un assemblage de plusieurs librairies tierces et de services externes — queue + worker, retry + DLQ, signed URL + storage, OAuth + 2FA + rate limit, OpenTelemetry + clock injecté pour les tests — existe ici sous une API homogène, maintenue par la même équipe, documentée au même endroit.
Sur la plupart des produits que je vois passer — SaaS B2B, marketplace, plateforme métier — chacune de ces briques s’utilise sans glue code.
API Platform en particulier mérite qu’on s’y arrête : on déclare une entité Doctrine, on annote, et on obtient une API REST + GraphQL + OpenAPI documentée + Mercure-pushable, sans écrire un controller. Dans certains contextes, le gain de productivité se compte en facteurs, pas en pourcentages.
Je n’ai pas utilisé Laravel en profondeur sur la durée, mais il faut le mentionner : l’autre grand framework PHP, communauté massive, DX très soignée, écosystème (Forge, Vapor, Livewire, Reverb) cohérent et orienté product. Pour une petite équipe qui privilégie la convention sur la configuration, c’est un choix qui se défend très bien.
WordPress, que je n’ai pas non plus en main au quotidien, reste un incontournable de l’écosystème — environ 40 % des sites web tournent dessus, le marché de plugins commerciaux est mature, et il propose désormais une vraie API REST/GraphQL via WPGraphQL pour qui veut l’utiliser comme headless CMS.
L’écosystème PHP ne se résume pas à Symfony, et ses différentes branches couvrent l’ensemble du spectre des produits web modernes.
L’outillage qui rend la qualité industrielle
C’est probablement le segment où le décalage entre perception et réalité est le plus fort. En quatorze ans, j’ai vu l’outillage PHP passer d’un assemblage de scripts maison à un socle industriel — au point d’être aujourd’hui plus stable, à mes yeux, que de nombreux écosystèmes front modernes où les outils évoluent très vite.
PHPStan est devenu la colonne vertébrale de l’analyse statique. Le mode strict (level 9) attrape une très large majorité des erreurs
typées avant l’exécution ; le level 10, sorti avec la version 2.0, traque jusqu’aux types mixed non résolus et est devenu un badge qualité dans l’OSS PHP. Une
codebase Symfony sérieuse passe au minimum level 8 en CI. L’extension phpstan/phpstan-symfony ajoute la
connaissance fine du container, des services, du routing et des paramètres — concrètement, PHPStan sait que $container->get('doctrine') retourne un Registry
et que tel paramètre est un int. C’est précieux.
Rector est l’outil qui m’a fait passer plusieurs codebases de PHP 7.4 + Symfony 4 à PHP 8.5 + Symfony 7 sans semaines perdues. Il
connaît les règles de migration de PHP, de Symfony, de Doctrine, et il les applique sur des centaines de fichiers d’une commande. Le set
SymfonySetList::SYMFONY_70 enchaîne en quelques minutes des transformations qui prendraient des semaines à la main. Il permet notamment le passage des
annotations aux attributs PHP 8, la migration des services et la mise à jour des signatures de contrôleurs.
PHPUnit reste le framework de test de référence dans l’écosystème Symfony, et la version 13 sortie en février 2026 confirme qu’il
évolue avec une grande rigueur — métadonnées par attributs PHP 8, attentes plus strictes, isolation par défaut. Couplé au WebTestCase et au KernelTestCase
fournis par Symfony, il couvre l’intégralité du spectre, du test unitaire au test fonctionnel HTTP. Pour les tests d’API,
API Platform fournit son propre ApiTestCase qui s’intègre nativement à PHPUnit. Et pour ceux qui veulent valider la pertinence de
leurs tests, Infection complète l’arsenal via mutation testing.
PHP CS Fixer est le formatter de référence côté Symfony, avec ses presets @Symfony et @Symfony:risky qui appliquent
automatiquement les conventions de la communauté. Configuration en .php-cs-fixer.dist.php, intégration CI/IDE, fin du débat sur le style. La règle
@PER-CS2.0 permet en plus de s’aligner sur le standard PHP-FIG le plus récent.
Côté sécurité, composer audit est intégré nativement à Composer depuis la 2.4, et depuis la 2.9 il bloque
automatiquement l’installation de dépendances vulnérables. À intégrer en CI, sans discussion. Pour aller plus loin,
Roave Security Advisories verrouille au niveau du composer.json lui-même, et le
Local PHP Security Checker maintenu par Symfony reste une option en complément.
Pour l’architecture, Deptrac ou PHPat (en extension PHPStan) permettent de tester les contrats entre couches — interdire qu’un contrôleur appelle directement un repository, par exemple — et de transformer la discipline d’architecture en règles vérifiées en CI. Sur les projets Symfony qui structurent leur code en bounded contexts ou en architecture hexagonale, c’est un filet de sécurité qui paie immédiatement.
Une CI minimale, mais sérieuse, sur un projet Symfony en 2026 ressemble à ceci :
# .github/workflows/ci.yml (extrait)
- run: composer install --no-progress
- run: vendor/bin/php-cs-fixer fix --dry-run --diff # style
- run: vendor/bin/phpstan analyse # types (level 8+)
- run: vendor/bin/rector --dry-run # déprécations à venir
- run: vendor/bin/phpunit --coverage-clover=clover.xml
- run: composer audit # CVE
Six commandes, six garanties concrètes : style propre, types corrects, code aligné sur la prochaine version, comportement testé, pas de dépendance vulnérable. C’est exactement le niveau que j’attends d’un projet TypeScript sérieux. À cela j’intègre systématiquement la Symfony CLI, qui embarque un serveur dev TLS, l’intégration Docker et un security checker, et Castor (porté par JoliCode) comme task runner moderne pour orchestrer les commandes du projet — en remplacement de Make ou de scripts shell disparates, avec une vraie ergonomie PHP et l’autocomplétion qui va avec.
Mentions spéciales
En complément, quelques outils structurants de l’écosystème méritent d’être mentionnés :
Côté testing, Pest mérite d’être mentionné même si je reste fidèle à PHPUnit : sa syntaxe expressive et sa version 4 — qui intègre Playwright pour les tests browser sans stack JavaScript séparée — en ont fait le framework qui monte le plus vite, particulièrement côté Laravel (plus de 39 millions d’installations début 2026). Pour une équipe qui démarre from scratch, c’est une option défendable.
Côté analyse statique, Psalm, maintenu désormais par Daniil Gentili, reste l’alternative à PHPStan. Sa singularité tient à son taint analysis — détection statique des XSS, SQL injection et command injection — qui n’a pas d’équivalent gratuit dans l’écosystème.
Côté runtimes, au-delà de FrankenPHP traité dans la section suivante, RoadRunner (serveur d’application en Go avec queue et gRPC intégrés) et Swoole (extension coroutines/event-loop) sont les deux autres choix sérieux pour sortir du modèle PHP-FPM. Pour le serverless, Bref est devenu le standard de fait pour exécuter du PHP sur AWS Lambda.
Côté environnement de dev, DDEV s’impose comme la solution Docker multi-stack la plus mature toutes communautés confondues (Drupal, WordPress, TYPO3, Symfony, Laravel), tandis que Laravel Herd offre une expérience native macOS/Windows particulièrement soignée pour qui veut éviter Docker en local.
Côté distribution, PHIVE (Phar Installation and Verification Environment) permet d’installer des outils QA signés GPG sans polluer le
composer.json du projet, et Box reste le standard pour packager une application PHP en PHAR autonome.
Enfin, mention pour Mago, un nouvel entrant écrit en Rust qui ambitionne d’unifier linter, formatter et analyseur statique dans un seul binaire, à la manière de ce que Biome fait côté JavaScript. C’est encore jeune (pré-1.0 fin 2025), mais typiquement le genre d’outil à surveiller de près pour anticiper les prochaines évolutions de l’écosystème.
FrankenPHP — la rupture qui change l’équation infra
C’est probablement la transformation la plus structurante de ces deux dernières années. FrankenPHP, porté par Kévin Dunglas (le créateur d’API Platform), est un serveur d’application PHP construit sur Caddy, distribué en binaire unique, et qui propose un worker mode : le process PHP reste en mémoire entre les requêtes, et le bootstrap du framework n’est exécuté qu’une fois au démarrage du worker.
Le résultat n’est pas une amélioration marginale. Sur une application Symfony standard, voici un benchmark publié sur Symfony 7.4 (source DEV.to, début 2026) :
| Setup | Throughput | Latence p95 |
|---|---|---|
| Nginx + PHP-FPM | 1 240 RPS | 45 ms |
| FrankenPHP (worker mode) | 3 850 RPS | 8 ms |
Trois fois plus de requêtes par seconde, latence p95 divisée par cinq. Sur Laravel, certaines migrations en worker mode rapportées par la communauté montrent des gains très significatifs sur des endpoints lents (à contextualiser selon les cas). Ces résultats doivent être validés dans le contexte de votre charge, mais l’ordre de grandeur est représentatif.
L’implication côté infrastructure est directe : à trafic constant, on divise par trois ou quatre le nombre de workers nécessaires. Sur un SaaS B2B servant quelques milliers d’utilisateurs concurrents, cela se traduit typiquement par un passage de quatre à six instances applicatives à une ou deux. Le coût mensuel suit.
Le déploiement est également simplifié : un binaire FrankenPHP peut embarquer le serveur, le runtime PHP et la configuration HTTP (Caddy), avec HTTPS automatique, HTTP/3 et intégration native avec Mercure. On s’éloigne d’une stack classique Nginx + PHP-FPM + reverse proxy à orchestrer.
La migration est étonnamment peu coûteuse. La plupart des applications Symfony tournent en worker mode sans changement, à condition de respecter une règle
simple : ne pas conserver d’état mutable entre deux requêtes. Les rares services qui cachent de la donnée request-scoped doivent implémenter ResetInterface,
ce qui est généralement rapide à corriger.
L’argument historique de la « lenteur PHP » reposait sur le modèle process-par-requête de PHP-FPM. Ce modèle n’est plus la seule option — et, dans la majorité des projets web applicatifs, la performance n’est plus un facteur discriminant.
Front, mobile et temps réel sans empiler de stack JS
C’est probablement le segment où PHP a longtemps été à la traîne. Une application web moderne implique de l’interactivité côté client — et la réponse historique côté PHP n’a jamais été pleinement convaincante. C’est ce qui a changé.
Symfony UX Live Components est l’approche que j’utilise désormais par défaut sur les SaaS B2B. Un composant Twig porté par une classe PHP, qui se met à jour côté serveur en réponse aux interactions utilisateur, rendu HTML envoyé par fragments, état conservé côté serveur, synchronisé via des attributs HTML signés. Pas de framework JavaScript, pas de bundle, pas de duplication de logique métier entre front et back. Concrètement :
// src/Twig/Components/UserSearch.php
#[AsLiveComponent]
final class UserSearch
{
use DefaultActionTrait;
#[LiveProp(writable: true)]
public string $query = '';
public function __construct(private UserRepository $users) {}
public function getResults(): array
{
return $this->users->searchByName($this->query, limit: 20);
}
}
{# templates/components/UserSearch.html.twig #}
<div {{ attributes }}>
<input type="search" data-model="query" placeholder="Chercher un utilisateur…">
<ul>
{% for user in this.results %}
<li>{{ user.fullName }}</li>
{% endfor %}
</ul>
</div>
C’est tout ce qu’il faut. Le data-model lie l’input à $query, le rendu se met à jour à chaque frappe (avec debounce). Dans la grande majorité des écrans
d’admin et de SaaS B2B, ce niveau d’interactivité suffit largement — et on a écrit zéro JavaScript.
Pour le temps réel, Mercure est intégré nativement à Symfony et API Platform. Un publisher côté serveur, un consommateur SSE côté navigateur, et on obtient des notifications, du collaborative editing ou des mises à jour temps réel — sans WebSocket à gérer.
Pour le mobile, l’arrivée du bridge Hotwire Native côté Symfony (via symfony/turbo couplé au shell natif Hotwire de 37signals) change l’arbitrage. Au
lieu de maintenir trois codebases — web React, app iOS Swift, app Android Kotlin — on maintient une codebase Symfony qui rend du HTML. Deux shells natifs
minimaux chargent ce HTML dans des WebView optimisées.
Quand on a besoin de natif (caméra, notifications push, capteurs), on l’expose via des bridges JS↔natif. C’est notamment l’approche utilisée par Basecamp pour HEY, et elle est désormais pleinement utilisable en stack Symfony.
Sur un produit SaaS B2B avec une app mobile companion, c’est souvent le meilleur compromis : équipe unique, codebase unique, parité de feature quasi immédiate.
L’IA côté produit : ce que change l’écosystème Symfony
La dernière objection que j’entends de plus en plus, c’est que les apps IA-first se font en Python — c’est là que sont les bibliothèques, c’est là que sont les benchmarks. C’est en partie vrai pour la R&D et l’inférence custom.
Ce n’est pas le cas pour la majorité des applications qui consomment des LLM via API — ce qui couvre une très large majorité des produits IA aujourd’hui : chatbots métier, RAG, agents, tool use, copilotes intégrés.
L’Initiative Symfony AI lancée par Christopher Hertel formalise ce qui était déjà bricolé dans plusieurs projets. Concrètement, elle couvre :
- appels aux LLM (OpenAI, Anthropic, Mistral, Ollama)
- gestion des messages et des tool calls
- embeddings et stores vectoriels (Pinecone, Qdrant, pgvector)
- pipelines RAG
- agents avec planification
C’est encore jeune et en évolution rapide, mais déjà exploitable sur la majorité des cas applicatifs côté produit.
Sur un projet récent où il fallait ajouter un assistant métier RAG sur une base documentaire client, j’ai monté la chose en Symfony :
- ingestion des documents en background via Messenger
- embeddings stockés en pgvector
- retrieval + génération via Symfony AI
- UI Live Component pour le chat avec streaming SSE via Mercure
Tout dans la même codebase.
Pas de service Python séparé à orchestrer, pas de double déploiement, pas de fragmentation de l’architecture.
Quand PHP/Symfony est le bon choix en 2026
Voici comment je positionne aujourd’hui PHP/Symfony pour un nouveau produit :
| Critère | Verdict PHP/Symfony en 2026 |
|---|---|
| Vélocité de delivery | API Platform + EasyAdmin + Live Components → MVP complet et structuré en quelques semaines |
| Coût d’infra | FrankenPHP worker mode → 3–4× le throughput de PHP-FPM, coûts divisés d’autant |
| Profil de recrutement | Marché fluide : pool large, séniors stables, freelances disponibles |
| Longévité du code | Rector + PHPStan → migrations automatisées, code maintenable sur dix ans et plus |
| Couverture fonctionnelle | API, SaaS, e‑commerce, back‑office, temps réel, mobile, IA — tout est couvert |
Il existe des cas où une autre stack est mieux placée. Pour de la recherche IA pure, du calcul scientifique, du temps réel sub‑milliseconde, ou du tooling système, PHP n’est pas le bon choix — et personne ne prétendra le contraire.
Mais pour la grande majorité des produits modernes — SaaS B2B, e‑commerce, back‑office métier, API exposées, assistants IA connectés aux données — l’écosystème PHP est aujourd’hui une option par défaut parfaitement défendable. Pas un compromis nostalgique : un choix de praticien, ancré dans quatorze ans d’observation directe.
C’est ce constat que je voulais poser, après quatorze ans de terrain.