Zend Framework, one of the big frameworks today. Is it the right choice, is it the wrong choice? We believe it's one of the right choices for professional PHP development. Here's 10 reasons why!
As mentioned in our earlier post, “Zend Framework - 10 Must Dos”, modules allow for a very well laid out and logical approach to development of your application. The help guide, or enforce, depending on your point of view, you and your team down a specific path when designing and developing. It is a bit to get used to, but very clear to maintain – when done right.
Guides your development approach
As we touched on in our last point with modules, the framework guides you in a clear, well laid out path to development. But it goes beyond modules, into FrontController plugins, class naming and to the choice of basing the coding convention on the popular PEAR standard – with some modifications.
Follows mature coding and naming conventions
Taking the much refined PEAR coding standard and making some adjustments, by coding against the standard, you and your team are coding against a standard that is well known and well understood. When followed, there's a clear, consistent and mature convention to follow. Now a coding standard on its own doesn't a project make, but it's definitely a professional point to have.
Through default projects created with zf(.sh|bat), from the very start there is clear encouragement to build tests along with the code. Whether you're using a TDD, approach or one of the many others, Zend Framework makes use of PHPUnit, an professional and reliable tool to build and manage the projects tests.
I have not personally asked a lot of questions of Matthew Weier O'Phinney, or Rob Allen, but when I have the questions have been answered reasonably quickly and always with an educated and professional tone. In addition, the IRC channel on #freenode provides a wealth of helpful and knowledgeable developers. Then there are the developers in the wider community contributing modules and library extensions. They are often helpful and very resourceful and knowledgeable.
Having a quick browse of the Zend Framework Manual and API online shows the wealth of information on offer. Though not always correct and sometimes the subject of some contention, it does contain an enormous amount of information about both the api and how to implement it, along with why some of the decisions were taken.
Like any good software project, it is under intense and active development. Up to version 1.10.1 at the time of writing, version 2 is rapidly approaching.
Formal bug resolution process
Through the Jira bug manager, the entire development community can see if there are issues, know if they have a resolution and potentially when. Jira is a quality tool used by a number of projects and companies. During the development of one of our projects I was able to use it to investigate an issue quickly and effectively, saving time and effort.
When an extension library is coded against the framework coding convention, it's trivial to integrate it with your existing project. I had this experience when I was looking for libraries to interact with CouchDB and MongoDB (insert links to projects). I found the Phly_Couch library by Matthew Weier O'Phinney and the Shanty_Mongo library by Coen Hyde. All that was required to use them was to drop them in to the project library directory and then enable them as an autoloader namespace. Simple and no time wasted.
Take at will libraries
Though the framework provides a MVC component, you don't need to use it. You can integrate one or several of the libraries with your existing framework or codebase; whether that's Yii, Kohana, CodeIgniter or home-brewed MVC framework. Maybe you just have a need for interacting with Google, well there's Zend_GData, maybe you need to interact with CouchDB or MongoDB, well there's Phly_Couch and Shanty_Mongo. Maybe you need some pagination, there's Zend_Paginator combined with Zend_Cache
Do you agree or disagree?
We'd love to hear your opinion, your experiences and what you think about the framework.