Like many other web developers out there I started developing in PHP somewhere around six years ago (it’s already been that long). In a time when PHP 4 was the king, and the community was producing less than acceptable code in large quantities.
It was a time when having a guestbook on your website made you a rock star; a time when PHP development consisted in browsing scripts on hotscripts and hacking them to your needs. A time when development time was primarily focused on trial & error, without all the fanciness you get nowadays with framework and well implemented design patterns.
Even so, it is not a stage of PHP adolescence that I would likely relieve, quite the opposite… I would rather remove it from my memory, eternally and undisputed.
If I remember well, it was about two years ago that I first laid hands on CodeIgniter. It was my first web framework and came in touch with it after seeing it listed as development tool of one web agency I was checking out.
Checked their website, watched the
blog in 20 minutes and I was hooked. Used it for a while, and was satisfied by it.
What I liked about CodeIgniter:
- Non-intrusive. There are placed some common guidelines but the enforcement is not really felt.
- Big community, although with time you can see that the level of expertise is not that high, being for most (like myself) their entry to PHP frameworks.
- URL dispatching. I always had to provide my own dispatcher, and was the most annoying part of development. (not as annoying as form generation and validation, but still annoying)
What I disliked about CodeIgniter:
- CodeIgniter, in my opinion, suffers from weakly built libraries and this always made me use other libraries freely available online
- Lack of true Active Record implementation.
- Scaffolding is only a demo feature; looking good for demonstrations but not that useful in actual development stages
- The session class, besides the fact that it does not use PHPs native session, it holds the content of session data in the cookie (default) because the adherence of the framework to REST principles.
I’ve started using symfony about a year ago and I must tell you that it is a full featured framework compared to CodeIgniter. As I’ve read symfony borows a bunch of concepts and features from Ruby on Rails, which by all means make it a hype driven framework; or doesn’t it?
What I liked about symfony:
- The dispatcher and more flexible URI routing class
- Components, partials, slots. I wouldn’t see myself developing further on without using a framework that has components.
- True Active Record pattern implementation with Propel (which was quite hard to adapt to at first), or as with the new Doctrine, Entity pattern implementation.
What I disliked about symfony:
- Configuration stored in YAML format files
- Lack of proper documentation (at least for version 1.0 that I was bound to use) and a very, very small community. My biggest issue with the framework
- The way the validation works, again not one of my favorite ways
Not much to complain about it because a large part of my problem with it – the documentation if I wasn’t explicit enough – was fixed.
Zend Framework (which technically isn’t a framework) is something I was for a period keen on learning, but that desire has disappeared in time, seeing it now as an over engineered set of libraries.
Don’t get me wrong, I don’t dismiss the quality of Zend Framework, but I have never been in the situation of actually creating something that required such fine control of every element of the application.
Simply put: consider Zend Framework a great starting point for building anything on top of it, from frameworks to complex solutions, but not something ready (out of the box) for websites.
Zend Framework would have been such a great thing to discover a couple of years ago, when I was still dealing with
vanilla PHP. Much time would have been saved indeed.
Recently I embargoed one of my work colleagues projects which used Kohana at its base. I heard many praises regarding Kohana so I was really glad I had the opportunity to experiment with it as well. Not much did I actually end up solving with it, and the project shifted on using symfony; most importantly because I and another colleague where far more accommodated with it and there where a couple of features we missed in Kohana. The shift wasn’t dramatical because the project itself was in the early stages and such a switch didn’t really affect the project.
What I liked about Kohana (on top of features I’ve known in CodeIgniter):
- Easily separate the web application into modules, which lead to a greater degree of maintainability.
- Better translation support.
- True Active Record implementation.
- More robust libraries.
What I disliked about Kohana:
- Lack of components. And I wasn’t the only one who seemed to feel their lack, the first developer (the one who started building the application on Kohana) rolled out its own implementation of components, albeit less flexible that I came to know when using symfony
- Not mature enough ORM. While it can be easily replaced with another ORM (Propel/Doctrine) I found it disappointing of them to put energy in yet another ORM that will not get wide adoption (I am referring to users outside the Kohana community).
- No fine control over the cache, or I may have completely missed it.
This is my point of view, and you should stick to the one you like (and are more familiar with) without giving much regard to random people online.
As you can see I could only take one small part of the currently available PHP frameworks out there, and there are still a couple I would be very interested myself: Yii, Lithium, CakePHP, Prado, Recess…
So if you happen to have experience with any of the above mentioned frameworks (both written about and others) please feel free to leave a comment bellow because I’m very eager reading other peoples opinion.