You will find the 🇬🇧 english version of this article here
Bonjour ! Je suis Jean-François Lépine, et je m'intéresse à la qualité logicielle depuis plusieurs années. J'ai créé PhpMetrics, puis Ast-Metrics, et j'ai aidé de nombreuses entreprises à industrialiser leurs processus de développement.
Je voulais avoir une vue d'ensemble du code PHP existant, alors j'ai tout analysé. J'ai téléchargé l'intégralité de l'écosystème PHP - pas moins de 236 Go de dépôts Git contenant au total 2,3 milliards de lignes de code.
Le script d'analyse a tourné pendant trois jours complets, traitant chaque fichier. Je l'ai développé en Go pour des performances optimales et un contrôle précis du CPU - l'analyse PHP à cette échelle nécessite une optimisation sérieuse.
Le PHP open-source est moderne, modulaire et maintenable. Mais attention à la dépendance excessive à quelques packages centraux et aux projets sous-maintenus.
Il est important de noter que ces métriques proviennent de projets open-source, qui diffèrent significativement des bases de code typiques d'entreprise. Les bibliothèques open-source privilégient souvent l'extensibilité et l'abstraction (ce qui explique le ratio élevé interfaces/classes), tandis que les projets d'entreprise se concentrent davantage sur l'implémentation de la logique métier et des cas d'utilisation spécifiques. Lors de l'évaluation de votre propre base de code, considérez si votre contexte s'aligne davantage avec les modèles de conception de bibliothèques ou les implémentations spécifiques aux applications.
J'ai analysé 11,1 millions de fichiers PHP, totalisant plus de 707,6 millions de lignes de code PHP — faisant partie d'un impressionnant total de 2,3 milliards de lignes de code toutes langues confondues dans l'écosystème Packagist. Ces métriques offrent un aperçu réel de la structure du PHP dans la nature, au-delà des bonnes pratiques théoriques.
Une écrasante majorité de 36% des fichiers contiennent moins de 100 lignes de code logique, avec une médiane de seulement 4,0 lignes.
Cela révèle une forte préférence à l'échelle de l'écosystème pour des implémentations petites et ciblées - bien plus petites que ce que la plupart des guides de style suggèrent comme maximum. Cela reflète également l'utilisation massive des interfaces dans l'écosystème, avec 3,7M d'interfaces comparé à 7,4M de classes - beaucoup de ces interfaces ne contenant aucun code logique, uniquement des signatures de méthodes.
76,5% des fichiers maintiennent une faible complexité (0-10), tandis que 23,5% s'aventurent dans un territoire de plus haute complexité.
Même avec un accent mis sur les petits fichiers, près d'un quart de la base de code montre encore une complexité significative – mettant en évidence des zones où la maintenabilité pourrait être problématique.
411,6K
Packages PHP de l'écosystème PHP
11,1M
Fichiers PHP détectés
53,4M
Méthodes PHP analysées
707,6M
L'un des aspects les plus révélateurs de l'écosystème PHP est l'extrême concentration des téléchargements.
Les données montrent que seulement 136 packages (0,05 % de tous les packages) représentent plus de la moitié de tous les téléchargements mensuels dans l'ensemble de l'écosystème.
Cette concentration reflète plusieurs dynamiques importantes dans le monde PHP :
L'écosystème PHP a mûri pour s'appuyer sur un ensemble relativement restreint de bibliothèques centrales qui fournissent des fonctionnalités essentielles. Cette base stable signifie que les développeurs n'ont pas besoin d'évaluer constamment des implémentations concurrentes pour les besoins fondamentaux.
De nombreux packages populaires sont des éléments fondamentaux qui sont inclus comme dépendances transitives dans des milliers de projets. Cet effet en cascade amplifie le nombre de téléchargements pour ces packages fondamentaux.
La découverte encourageante est que ces packages à fort impact sont très majoritairement bien maintenus et sains :
Packages qui représentent collectivement 50% ou plus des téléchargements mensuels
Nombre de packages dominants
136
% du total des téléchargements
0,05
Total des téléchargements mensuels
2808,6M
En analysant la relation entre les étoiles GitHub et le nombre de téléchargements, j'ai découvert un sous-ensemble fascinant de packages PHP : ceux qui ont des nombres de téléchargements massifs mais étonnamment peu d'étoiles. Ces packages forment ce qu'on pourrait appeler "l'infrastructure invisible" de PHP — des composants d'une importance cruciale qui opèrent silencieusement sous la surface d'innombrables applications.
Ce "déficit de reconnaissance" a plusieurs implications importantes :
En contraste, ces packages sont à la fois très populaires et largement utilisés. Ils constituent la pierre angulaire de PHP.
taille des bulles proportionnelle aux forks GitHub
L'analyse des packages PHP révèle des préoccupations importantes concernant la santé de l'écosystème Packagist : 70% montrent une activité minimale avec peu de téléchargements et d'interactions GitHub, tandis que 23% semblent abandonnés sans mises à jour récentes. Avec une moyenne de seulement 60 étoiles par package (fortement influencée par les cas exceptionnels populaires), ces métriques mettent en évidence la distribution typique en "longue traîne" des écosystèmes open source. Ces données soulignent l'importance d'évaluer soigneusement la santé des dépendances à travers des métriques comme le facteur bus, la fréquence des mises à jour et l'engagement de la communauté lors de l'intégration de packages dans des projets de production.
94,9K
Packages abandonnés
288,5K
Packages avec peu de téléchargements, peu d'étoiles ou de forks GitHub
60
Package | Nombre de packages l'utilisant |
---|---|
phpunit/phpunit | 201.5K |
orchestra/testbench | 33.9K |
squizlabs/php_codesniffer | 33.8K |
phpstan/phpstan | 32.3K |
mockery/mockery | 31.8K |
friendsofphp/php-cs-fixer | 24.4K |
pestphp/pest | 11.5K |
vimeo/psalm | 10.5K |
phpstan/phpstan-phpunit | 9.7K |
laravel/pint | 9.6K |
phpstan/extension-installer | 9.0K |
symfony/var-dumper | 8.9K |
nunomaduro/collision | 8.4K |
roave/security-advisories | 8.2K |
phpmd/phpmd | 6.7K |
symfony/phpunit-bridge | 6.5K |
phpstan/phpstan-deprecation-rules | 6.4K |
pestphp/pest-plugin-laravel | 6.2K |
satooshi/php-coveralls | 6.0K |
php-coveralls/php-coveralls | 5.8K |
Package | Number of packages using it |
---|---|
illuminate/support | 46.4K |
guzzlehttp/guzzle | 39.7K |
laravel/framework | 18.9K |
illuminate/contracts | 16.2K |
yiisoft/yii2 | 16.2K |
symfony/console | 13.0K |
psr/log | 11.7K |
symfony/framework-bundle | 11.2K |
illuminate/database | 10.2K |
composer/installers | 9.0K |
symfony/yaml | 8.8K |
psr/http-message | 8.6K |
monolog/monolog | 8.0K |
symfony/dependency-injection | 7.7K |
symfony/http-kernel | 7.6K |
symfony/http-foundation | 7.1K |
symfony/config | 7.1K |
twig/twig | 6.6K |
spatie/laravel-package-tools | 6.5K |
doctrine/orm | 6.4K |
Malgré la réputation parfois critiquée de PHP, les données racontent une histoire différente. Les packages PHP montrent un code étonnamment propre, facile à maintenir et à comprendre. Les fonctions sont remarquablement courtes, les différentes parties du code s'harmonisent bien et les packages gardent une taille raisonnable. Il s'avère que les développeurs PHP n'écrivent pas du code spaghetti après tout - ils élaborent des plats bien structurés qui feraient hocher la tête d'approbation même aux chefs de code les plus exigeants.
Complexité cyclomatique moyenne
8,8
Complexité cyclomatique médiane
4,0
Indice de maintenabilité
108
Lignes par méthode
3,0
Si vous êtes curieux des packages ayant le plus de lignes de code, vous trouverez les 100 premiers packages ci-dessous. Notez que les plus gros packages concernent les données géographiques et intègrent beaucoup de données dans leur code.
Package | Lignes de code | Fichiers |
---|---|---|
xnrcms/alipaysdk | 2.8M | 11.4K |
zerossb/laravel-world | 2.2M | 48.0 |
tencentcloud/tencentcloud-sdk-php-intl-en | 1.9M | 19.2K |
vccmas/tencentcloud-sdk-php-intl-en | 1.6M | 15.5K |
zohocrm/php-sdk-6.0 | 1.5M | 15.7K |
udemy/googleads-php-lib | 1.5M | 1.1K |
volcengine/volcengine-php-sdk | 1.3M | 3.1K |
vavajke/bxcore | 1.3M | 4.4K |
sos-solution/other-framework | 1.2M | 8.7K |
tombeachell/forza-magento | 1.2M | 4.2K |
👉 Le PHP moderne est plus que du PHP. C'est un écosystème qui se mélange avec diverses technologies, rendant les compétences multi-langages de plus en plus précieuses pour les développeurs PHP.
Maintenant que la majorité du processus est automatisée, il me reste encore quelques nettoyages de code à effectuer, mais je pense qu'il serait utile de réaliser cette analyse au moins deux fois par an pour maintenir une vue actualisée de l'écosystème PHP. Jusqu'à présent, je me suis concentré exclusivement sur Packagist, mais ce n'est pas le seul gestionnaire de packages - l'ajout de nouvelles sources de code fournirait une image plus complète.
J'envisage également d'implémenter des métriques de code plus avancées pour approfondir l'analyse. Les métriques actuelles nous donnent une bonne base, mais il y a toujours plus à apprendre sur la qualité du code et la santé de l'écosystème.
Si vous avez des idées de métriques ou de fonctionnalités supplémentaires qui pourraient améliorer ce tableau de bord, n'hésitez pas à me contacter - vos suggestions pourraient aider à façonner l'orientation future de ce projet !
© Jean-François Lépine, 2013 - 2025