De C# à PHP : le grand écart pour développer MyClub

Créé par Jean-Emmanuel Bissey le 09/09/2026 Publié

Il y a des retours aux sources qui font plaisir… et d'autres qui font un peu mal. Pour développer MyClub, mon application web destinée aux associations, je suis revenu à PHP après plusieurs années de développement en C#.

De C# à PHP

Au début des années 2010, j'ai commencé à développer en C# / WPF, avec le pattern MVVM.

Et, bien que je sois un fervent défenseur des logiciels libres, je dois reconnaître que j'ai adoré développer avec Visual Studio. C'est le meilleur IDE que j'ai utilisé, sauf pour le WPF, qu'il est préférable d'écrire à la main si l'on veut du code propre. À ce jour, Qt Creator reste à mes yeux le meilleur outil que j'ai utilisé pour définir une interface visuellement : gérer les regroupements, les centrages avec les petits ressorts…

Le typage statique, l'autocomplétion, le refactoring et, surtout, les nombreuses erreurs détectées par le compilateur rendaient le développement en C# particulièrement confortable. Sans oublier toutes ses fonctionnalités : lambda, tuple, etc.

Lorsque j'ai voulu me lancer dans le Web, en 2025, je devais passer du client lourd au client léger.
Les solutions avec C#, WinUI, Razor ... me donnaient surtout l'impression que tout devenait compliqué. Et franchement, mais je l'ai vu plus tard, avec les PWA (Progressive Web App), plus besoin d'une usine à gaz pour avoir une application « installable » sur toutes les plateformes.

Alors je suis revenu à mes anciennes amours : PHP. Et heureusement, PHP avait énormément évolué.
Mais le grand écart entre un langage fortement et statiquement typé comme C# et un langage historiquement dynamique comme PHP allait être… douloureux.

L'IA : rapide pour démarrer, moins pour structurer

Mon objectif était d'abord simple : obtenir rapidement une maquette fonctionnelle.
Pour cela, l'IA est formidable : quelques prompts suffisent à produire des routes, des formulaires, des vues et des requêtes SQL.

J'ai ensuite utilisé Flight (je voulais quelque chose de léger et rapide à prendre en main) pour structurer les routes, Latte pour les vues et Tracy pour le debug.
Très vite, quelque chose fonctionnait.
Mais faire fonctionner une application et construire une architecture maintenable sont deux choses différentes.

strict_types : le réveil brutal

Le code proposé par l'IA ne contenait même pas :

declare(strict_types=1);

Pour quelqu'un venant de C#, ce n'était pas acceptable. Je l'ai donc ajouté partout.

Et là…

Boulevard des erreurs !

Des chaînes passées comme des booléens, des false là où le code attendait un objet, des types de retour incohérents…
En réalité, strict_types n'avait pas créé ces problèmes. Il avait simplement arrêté de les cacher.
Et finalement, c'était plutôt une bonne chose.

Retrouver les garde-fous de C#

J'ai alors ajouté un programme de test capable de découvrir automatiquement les routes de MyClub et de les tester avec des paramètres par défaut.

Puis j'ai progressivement introduit des ViewModels et des Value Objects, afin de rendre les données manipulées beaucoup plus explicites.
L'objectif était simple : retrouver autant que possible les contraintes auxquelles j'étais habitué avec C#.

Mais le véritable changement est venu avec PHPStan. PHPStan permet d'analyser statiquement le code PHP et de détecter de nombreux problèmes avant même d'exécuter l'application.
J'ai progressivement augmenté son niveau d'analyse, jusqu'au niveau 9.

Avec strict_types, les types de paramètres et de retour, les propriétés typées, les Value Objects, les ViewModels et les tests automatiques, PHP reste évidemment PHP, mais on se rapproche beaucoup de la sécurité que j'appréciais avec le compilateur C#.

Finalement, un retour plutôt positif

Mon retour à PHP m'a appris une chose : l'IA permet d'aller très vite, mais elle ne garantit pas l'architecture.

Elle peut produire rapidement du code fonctionnel. À nous ensuite de mettre en place les contraintes nécessaires pour que ce code reste maintenable.

C'est probablement ce qui résume le mieux mon expérience :

En C#, le compilateur m'obligeait à être raisonnable. En PHP, j'ai dû apprendre à m'obliger à l'être.

Ça me rappelle un peu mon passage du Pascal au C. C est très puissant, mais il fallait vraiment l'utiliser de manière structurée. C'était dans les années 80… Le gros manque, à l'époque, c'était de ne pas pouvoir déclarer une fonction dans une fonction pour limiter strictement sa visibilité. J'ai découvert des années plus tard que c'était possible en C#.

Le plus amusant est finalement que je suis revenu à PHP pour éviter la complexité du développement web…et que j'ai fini par reconstruire autour de PHP une bonne partie des garde-fous que j'avais appréciés pendant mes années de développement en C#.

Le grand écart a été douloureux, mais finalement très instructif.