En Mars 2011, j’ai eu l’occasion de réaliser un comparatif des différents frameworks PHP existants. En voici un extrait réactualisé avec les chiffres du moment.
Un framework PHP, c’est quoi ?
Au moment d’industrialiser ses développements, toute entreprise cherche le moyen d’avoir la meilleure solution pour gérer son environnement. Cela passe donc bien entendu par le choix d’un IDE, le choix d’un gestionnaire de version, mais surtout par le choix d’un framework PHP. Celui-ci permet en effet de forcer les développeurs à utiliser des conventions dans leur façon de coder, et donc à n’importe quel développeur de pouvoir prendre en main l’ensemble du projet rapidement par la suite. Il permet aussi de guider les développeurs dans le choix technologique et d’architecture afin de pouvoir ajouter des « briques » au projet facilement par la suite.
Un framework PHP répond normalement à de nombreuses demandes des développeurs. Il doit par exemple prendre en compte nativement les éléments suivants :
- Modèle MVC : modèle vue contrôleur. Il permet de structure une application en distinguant la partie présentation, la partie base de donnée et la partie applicative.
- Templates : gestion des gabarits. Il permet de séparer le code applicatif de la présentation.
- Cache : Il permet de stocker les pages afin d’optimiser leur temps de chargement.
- Gestion des SGBDR : Il doit pouvoir gérer plusieurs type de base de données. MySQL bien entendu, mais éventuellement PostgreSQL ou Oracle en fonction des besoins.
- ORM : Mapping de relation objet. Cela permet de gérer la base de données sous forme d’objets.
- Scaffolding : échaffaudage. Permet de créer un espace d’administration d’un site sans aucun développement, uniquement à partir de l’ORM.
- Conventions : Oblige les développeurs à utiliser les mêmes conventions de codage afin d’avoir un code uniforme.
- URL conviviales : régles de redirection. Il doit pouvoir gérer les URLs facilement.
Comment définit-on le meilleur framework PHP ?
Il convient avant tout de définir des critères avant d’élire le meilleur framework PHP. En voici quelques uns :
- Prise en main : dans tous les frameworks, il est nécessaire de passer quelques temps afin de le prendre en main. Cette période peut être plus ou moins longues (de quelques heures à plusieurs semaines).
- Flexibilité : le framework peut imposer des contraintes très fortes pour obliger tous les développeurs à développer de la même façon. Mais cela peut finir par être limitant.
- Taille des projets : les petits projets peuvent être développer avec un framework ultralight.
- Documentation : une documentation complète est un réel plus !
- Performance : certaines frameworks sont trop gourmands. Même le moindre « Hello World » peut nécessiter l’appel à plus de 100 fichiers différents.
- Communauté : un forum actif sera synonymes de personne prête à vous aider en cas de problème
- Évolutivité : de quand date la dernière mise à jour ?
Toutes ces critères peuvent être plus ou moins pondérés en fonction de ce que vous attendez d’un framework. Pour ma part, je souhaitais un framework simple à prendre en main (en l’espace de quelques jours maximums), assez flexible et très bien documenté.
Les différents frameworks existants
Après étude, 5 frameworks semblent régulièrement utilisés : Zend Framework, Symfony, CakePHP, CodeIgniter et Yii. En France, les deux plus utilisés sont très certainement Zend Framework et Symfony. Néanmoins les USA ou la chine ont plutôt tendance à utiliser CodeIgniter ou Yii. Voici la courbe des recherches relative à ces frameworks durant les dernières années :
On constate que ces frameworks ont décollé fin 2005, en même temps que Ruby on Rails. CakePHP a longtemps été le plus utilisé, mais CodeIgniter a pris les devants début 2011. Yii est actuellement en train de cartonner et pourrait même finir par dépasser CodeIgniter dans les prochaines années. Si vous avez l’occasion, regardez les chiffres pour la France : Symfony est largement devant, mais CodeIgniter commence à monter en puissance.
Un avis rapide sur chacun de ces frameworks
CakePHP
Sa prise en main est rapide, mais il manque de fonctionnalité. Et sa communauté est de plus en plus réduite.
CodeIgniter
Ce framework est « léger : il laisse beaucoup de souplesse au développeur. Cela peut être un point faible comme un point fort. Sa prise en main est extrêmement rapide (quelques heures). Et la communauté est de plus en plus disponible. De plus vous trouverez sur Github des dizaines de librairies pour gérer tous les besoins classiques d’un développeur.
Symfony
Surtout utilisé en France, celui-ci est assez complexe : le développeur doit se plier aux nombreuses contraintes du framework. De plus celui-ci est assez lent. Il est recommandable dans le cas de projet conséquent (au delà de 1000j/h) et dans le cas ou dans le cas ou les développeurs ont déjà une expérience avec.
Zend Framework
Il a pendant très longtemps très peu évolué : la communauté ne pouvait que très difficilement contribuer au framework. La version 2 (que je n’ai jamais testé) a du corriger cela. Par ailleurs il est très contraignant et demande aussi un long temps d’apprentissage.
Yii
Je n’ai pas eu l’occasion de tester ce framework : je n’en avais pas encore entendu parler en 2011.
Conclusion
Pour finir, Symfony me semble très complet, et son formalisme est certainement très apprécié pour les gros projets. Par ailleurs, on peut aussi certainement l’utiliser aussi pour de petits projets à condition de l’avoir déjà pratiqué auparavant. Ainsi cela ne me semble pas envisageable de l’utiliser dans le cas du développement rapide d’applications webs à réaliser facilement et où le temps d’apprentissage est limité à quelques demi-journée.
C’est pourquoi je suggère d’utiliser CodeIgniter pour les futurs applications webs. Cela permettra de mettre un peu de formalisme dans les projets, tout en laissant tout de même de nombreuses possibilité de dérive et d’avoir un temps de formation réduit au strict minimum (de l’ordre de quelques heures pour comprendre le fonctionnement pouvoir commencer à réaliser quelque chose de concret).
Actuellement en version 2.1.3, CodeIgniter est disponible sur le site suivant : http://ellislab.com/codeigniter
Enfin des paroles sensées sur les Frameworks PHP 🙂