Over the course of your web development experience, what PHP framework(s) have you worked with? What strengths and weaknesses have you observed in those frameworks? Considering these, what framework would you recommend if beginning a new application?
Kohana  is similar to Code Igniter but is a PHP 5 only framework so its a bit cleaner to use.
UPDATE: As of Version 2.0.0 released January 28, 2011, PHP 4 support is removed. CodeIgniter  now requires PHP 5.1.6 (and is a bit cleaner to use). http://kohanaphp.com/
I have used Code Igniter  and it is a very slick and lean MVC framework. It is definitely a great option if you are building a custom application. Basically most of the plumbing and redundant work is ready for you to use, and you can concentrate on the look and feel along with the business logic. It does have a bit of a learning curve (similar to CakePHP ), however.
You might want to first quickly test out Drupal , or Joomla  (among others) that offer a fully setup and ready with little customization IF they have what you need. These giant frameworks are tough to customize, and they are mainly setup for Content Management applications. http://www.codeigniter.com/
CakePHP  has been my top choice for a while now. It's very simple to get started with, and allows for rapid development, following a similar model to Ruby on Rails. http://www.cakephp.org/
Well, we've been using Zend Framework on a private project for a few months, and it's been pretty painful. We also use it at work, and it's pretty painful there too. It's one to consider if you're starting on a project, but it's not stable and probably won't be for some time to come. I think Zend have managed it pretty badly; at one crucial point the docs were version 1.5 but the current version was still 1.0 and I wasted a lot of time trying to get it to do what it said it did in the docs.
The MVC is implemented in an OK fashion, but the absence of good tutorials was a terrible drawback when we were learning it back in Spring 2008. I believe most of any application should be in the model, and in ZF at the time this was given no coverage whatsoever.
I think it will need another year to be stable enough to live with, and I think it will probably become something of a standard once they've gotten it a bit more mature. Although it's from Zend, it's very much an ad-hoc community project with not enough centralised control, as far as I can see. And for the last year or so I'd say it's suffered as a result. I really wish we hadn't used it on the private project. At work, it's more of a long term thing and so it will probably pay off eventually.
The good thing about ZF is that you don't need to use the whole thing - for instance, you can start using the RSS functions or any other module with an existing application perfectly happily. You can use the MVC stuff or not. That flexibility is very valuable. The question is again whether the quality of the individual bits is there yet; my colleague really struggled with their ACL architecture, for example, but the RSS stuff is fine.
I've been pretty impressed with what I've seen of CakePHP, but haven't used it. I would probably give it a go on a new project; it's based on similar principles to Rails and has some nice design principles.
Zend Framework  is my choice for MVC-based applications. It doesn't force you to use any specific setup for your application but gives you guidelines that are easy to work with. Zend Framework also is an 'at-will' framework so if you don't want to use everything you don't have to.
I did a full write-up here  on why I really enjoy using it. http://framework.zend.com
I use CodeIgniter and recommend it heavily as it is very lightweight and fast.
However, there is a newcomer on the block (just a couple months ago) that is even faster and more lightweight then CodeIgniter. It's called Yii  and it's made by the guy who made the Prado framework. Check out this benchmark:
I haven't actually used it yet, but it looks very promising. http://www.yiiframework.com/
I'm very hesitant when it comes to using existing frameworks, because all frameworks that I checked use tons and tons of includes and you don't have control over which include is done when. The problem with that is, that includes are processes on your hard disk, i.e. they are slow - so you should try to have as few as possible.
Just looking at the MVC implementation in Zend gives me a headache. So you include "Zend/Controller/Front.php" and "Zend/Controller/Action.php". Not too bad so far. Hovever "Front.php" includes another 8 files and "Action.php" includes another 2 (plus 3 that are already in Front.php, so they don't really count). To make it short: You end up with about 20 includes before the application even started - and only using MVC. This number will still go up when you decide to use Zend_Db or anything else. Even if you use an opcode cache the system still needs to check if those files have been updated since when they have been cached...
If it's php... It's got to be CodeIgniter !
It's lightweight, Fast, and so easy to pick up and run with. It has great documentation! All of this pales in comparison to the amazing community that has formed around CI. I have never seen attitude on their forums (and I have posted some dumb questions). Not only are they nice but they has some very bright people writing and using CI.
If I have a choice I go with Ruby on Rails. http://codeigniter.com/
I've used Zend Framework with much success over the last 6 months, I have only worked with the 1.5.* line, so I haven't experienced any of the negatives brought up by @Flubba. I enjoy using Zend for several reasons:
A very robust library, a whole slew of classes have been created to provide an OO interface for most of the commonly used functions in PHP.
Read some comparisons by others:
Personally, I've only ever used CodeIgniter and Zend Framework. CodeIgniter I quit with after 2-3 days because I wasn't pleased. Zend Framework I have been pleasantly surprised with so far. Although, it did take a little code digging to finally get it to all fit together the way I wanted. All of the flexibility of ZF really hinders a newcomer. http://snook.ca/archives/php/codeigniter_vs_cakephp/
After toying with several frameworks, I finally landed on CodeIgniter . I'm going to quote this from their website, because it is very accurate:
CodeIgniter is right for you if:
A couple of things I'm gonna re-iterate:
I first started messing with ZendFramework cause I heard it was so great. But wow.. getting that thing installed was a royal pain. Maybe on certain servers out there its very simple, depending on how PHP is setup. But on the particular server I was working with (a stanard hostmonster web server) it was horribly difficult.
I also tried going the PEAR and CakePHP route, but PEAR was just too monolithic and CodeIgniter just seemed better/easier/faster than Cake. http://www.codeigniter
I recently build a complete admin interface for a shopping system with CakePHP in under three days, it was amazing. If your project is right up Cakes alley it's a dream to work with. Takes a while to get used to though, I tore my hair out for two weeks* on the first project I used Cake for before starting to get the hang of it.
*) Back in 1.1 days when documentation was sparse, the situation now is a lot better I think.
CakePHP  as well as being a wonderful MVC framework has a wonderful console. You can write scripts for cron to run or even interactive scripts for users to run in the command line that can use any model or controller you app can. You don't have to do any kludging of having a cron.php tied to a scheduled wget, or shafting the first person to visit your site after midnight with a long background process.
I've used it to generate thumbnails on large images, clean up the db, archive old items, and expire things that need expiring. It's simple and fits with the mvc cleanly. Though I might call this feature model/console/controller. http://www.cakephp.org
I've used CakePHP and QCodo for my PHP development. I've also evaluated CodeIgniter. All three have their strengths and weaknesses.
If you're a beginner to programming, then I'd recommend CodeIgniter. In my evaluation, I was pleased with their user community. I read several testimonials of beginning developers who were able to rapidly learn the framework. I'm not a big fan of CodeIgniter's data access layer. It is much better than writing raw SQL, but it lacks the simplicity of the ActiveRecord pattern IMO. On the plus side, CodeIgniter has a much smaller footprint than CakePhp. If performance is a concern, that should be taken into consideration.
If you're at all familiar with Rails, then CakePHP should be any easy win since Cake was actually started as a php version of Rails, but has since moved down it's own path. It has out-of-the-box active-record like ORM and basic code generations for your data models. The drawback of Cake is that it's documentation is lacking, and the amount of features crammed in can be overwhelming, especially at first.
QCodo is an event-driven framework that excels at code generation/scaffolding. If you are familiar with ASP.net webforms, windows forms development, or swing development, you'll catch on to QCodo's event-driven structure. Also, if your site is more of an internal use site and/or you want to have lots of auto generated forms and grids, then QCodo is the answer. However, it is probably the toughest when it comes to customizing the look and feel of your website due to the reliance on that code generation.
As a follow-up to Flubba , I just wanted to point out that the Zend Framework has matured a lot since 1.5/1.0 (Docs and Framework itself), the current version is 1.8.1 and is an absolute blast to work with. I was able to get version 1.8.1 up and running within minutes and had a project going with the template I wanted and the various bits and pieces within the first day. The second day I started playing with Zend_Form  to create new forms and to have them output as well as using the validators to make sure we got valid data and then using Zend_Mail  to send emails with attachments to satisfy project goals.
Had I instead done this all by hand using standard PHP it would have taken me much longer, and would have made it harder to keep up with the changing and moving goals for the project (my boss keeps wanting new things after seeing how fast I added what he previously wanted).
There are also plenty of tutorials out there now using Zend Framework and showing the various powerful features, the Zend Frameowrk Quickstart  is a fairly good starting point, it is the one I used to get started, from there reading the documentation is fairly easy.
The documentation is easy to follow, contains many concrete examples on how to accomplish various tasks, but at the same time there is a lot of flexibility in how to use the various components and that choice is left up to the programmer.
Rob Allen: Tutorial: Getting Started with the Zend Framework 1.8 
Maugrim The Reaper's Blog: Example Zend Framework Blog Application Tutorial: Parts 1-8 Revisited 
Damien Mathieu: A skeleton to build a Zend Framework application as DRY as possible 
Zend Framework has come a long way from the previous versions, you are still able to pick and choose from most of the available "classes" and use them stand-alone but it is becoming a very viable framework to start off development with on new projects. It is becoming a full featured web framework that can stand up next to Cake PHP , Symfony , CodeIgniter  and the many others that exist!
Zend Framework, while still one of the younger frameworks for PHP out there has some awesome potential, it is quick moving and bug fixes are being put into the framework almost daily. I recently had an issue with how modules were being bootstrapped and after reading through the bug reports I noticed that they had released a new version that day to fix those exact bugs I had been seeing! http://stackoverflow.com/questions/2648/what-php-framework-would-you-choose-for-a-new-application-and-why/2659#2659
No one seems to have mentioned the different types of framework as in Full Stack versus Glue. Without duplicating the excellent material already posted.
Glue frameworks such as CI, Kohana and Zend allow you to pick the parts you want and leave out the ones you don't. Not just the helpers but in CI/Kohana you can leave out say the Model part of the pattern.
However with the likes of Symfony and Cake you have to implement the whole shooting match the framework designers way without the option.
Neither approach is correct or incorrect an there are situations where you would use Glue over Full stack and vice versa.
There may well be arguments over what is defined as Glue or FS.
The real choice comes down to what the end result is going to be and how you make the journey and selecting the right tool for the journey. That will usually involve getting it wrong a few times.
My only experience is with CodeIgniter and it's fork, Kohana, I think that's how it's called. I'm happy with the way those function. However, depending on the application, a framework might become an overkill and it might just be better to use PHP and PEAR libraries without any fancy frameworks.
CakePHP if we are going to make anything more than a simple website. It's MVC architecture alone makes it a good choice.
Zend is a good second option because all the built-in libraries.
(bah where did my post go?)
You should use CakePHP  because it's going to be the fastest, easiest and funnest build you ever made.
Since there is a few people that mention the zend framework, it should be said that you can have your cake and eat it to . That's right, you can use the zend libraries as vendors in cake with little issues. In fact many people claim that while cake is a true framework, zend is just a set of libraries. Let's not get into that discussiom, but my vote is definitivly Cake.
Happy baking. http://cakephp.org
I think Symfony is an excellent choice. It has EXCELLENT documentation and is very intutive to learn. Built-in AJAX helpers, among many other helpful libraries make it easy to build a feature-rich web application QUICKLY.
Check out the Askeet!  tutorial to see how you can build a Stackoverflow-like application in 24 1-hour lessons. http://www.symfony-project.org/askeet/1_0/en/
When project requirements specify PHP, I use CakePHP.
One drawback is that Cake model finders return nested arrays instead of actual model objects. While this keeps the overhead low, the structure and index/keys for the data in the array can change depending if was part of an association, etc. This can be a problem when passing data from different finder calls to the same view. Also, being an array, you can't call business logic on results or use lazy loading to pull more information from the database.
Otherwise, it's a great framework.
Do you have to absolutely use a PHP-based framework? If not, consider Ruby on Rails in your analsysis. My team has decided that any future work will be on Rails since our current ORM is homebaked and sucks extremely bad. We were thinking of using symfony otherwise.
If you want something that is consistent, well written, has strong conceptual integrity and has no external dependencies, you should try Solar . It's very clean, simple and easy to extend.
One of the main reasons why I love it so much is that it allows me to re-use almost everything I write, from templates to complete applications. http://solarphp.com
@Flubba there are several good Zend Framework tutorials and there are also several Zend Framework books due to be released soon.
I think it depends on the kind of application you want to produce... As far as I am concerned, I prefer to deal with low level api such as TinyButStrong template engine .
Does anyone knows a place where frameworks are compared and where their weaknesses are detailed? http://www.tinybutstrong.com/
I think you're going to find that most people prefer the environment they work in most frequently. All of the major frameworks have something to recommend them otherwise they probably would have fallen by the wayside.
I'd recommend Drupal (it being what I'm used to) for the mass of contributed modules and out-of-the-box functionality. Drupal makes a lot of useful tasks easy that should be able to give you a site without a great deal of development effort. CakePHP is a decent choice as well if you are building from scratch, but I'm a fan of Drupal's modular architecture and built in functionality. I'd recommend against Joomla as a developer because I don't particularly care for their separation of code and display (or lack thereof in many cases) and the relative complexity of certain tasks-meaningful clean urls-compared with Drupal.
I'd also recommend against combining the frameworks for the most part because your PHP process can grow out of hand making it harder for you to handle a decent traffic load.
In the end, the choice is going to come down to preference, and I'd at least taste a couple before settling on a final choice. Figure out what seems right to you, learn the conventions and paradigms of the framework and stick to them, and you'll probably be happy.
Symfony is a excellent framework, but it is a bit complex and quite deep. If you want something basic and simple take a look at Code Igniter http://codeigniter.com  http://codeigniter.com/
I've really never felt comfortable with CakePHP or similar tools. I really like Qcodo. It feels nice and clean and building the "gui" seems more like building the interface in Delphi or Visual Studio.
I've been using CodeIgniter for since August 2009 and I absolutely love it. It's easy to learn, the source code, even though a lot of it is still in PHP 4, is very clean and very well written, the documentation is really good, straightforward and easy to navigate, the community is amazing. I would definitely suggest that as a first PHP framework.
Before CodeIgniter I had tried CakePHP. Although it has a nice command-line tool, it a lot harder to learn and the documentation is not nearly as good as the CodeIgniter's one. Also CakePHP's performance is really lacking, applications you create with it end up being really slow. All in all I really think CakePHP is really bloated and it would be much better if it was a bit more modular.
Recently I also tried Recess and Yii. My first impression is that they're really interesting but I haven't used them enough to talk about them extensively.
It would depend on the requirements of the application, of course. But I think the answer you are looking for is...CakePHP. I love it. I get my work done in 1/4th the time, I end up writing less code, and the code that I do write is better organized and more manageable. Also the documentation and support in the IRC channel is top notch.
Zend has been trying to sell me their technology for 10 years now, and it still hasn't caught on...
Symfony is supposed to be good, but I haven't checked it out.
CodeIgniter does not have all the features of CakePHP. It is faster than CakePHP in tests, but I'd rather just build my applications to scale linearly and throw more servers at it than spend my time writing code.
Drupal is a CMS, not an application framework. If you try to develop an application with Drupal, prepare for pain.
CakePHP - fast development time (and I mean REALLY fast), simplicity, convention over configuration, Rails similarity, decent performance (with cache), ajax inegration (with Prototype - but you can easily switch to jQuery which I prefer), unit testing out of the box, authorization and authentication built in and many more. Zend on the other hand tries to be more "enterprisy" but fails :)
Well it all depends on what application you're writing, ZF is more flexible but for majority of tasks (CRUD like applications, web2.0 sites etc) Cake is better.
But if you have choice of another programming language I encourage you to try out Ruby (and Rails for webdev) - it's even better then Cake.
I recently made the jump into PHP Frameworks myself. After speaking with proponents (and sometimes authors) of each at conferences/ via email, here's how it seems to boil down:
I haven't tried out the other frameworks, as they are supposed to be less "true" MVC. In exchange, they benchmark a lot faster. So, if speed is a big deal, try CI or one of the other leaner frameworks (but realize that they are less feature-rich). Personally, I don't worry too much about speed, since I've got recent dedicated servers to run sites that never serve more than a few dozen people at a time.
So, in evaluating these frameworks, I'd suggest you determine what you need. If you want speed, use CI. Fastest development (and rails-like simplicity), try Cake. Documentation? Symfony. Professional training? Zend.
Hope this helps! You can't do wrong with any of these, really -- I was amazed at how quickly I could turn stuff around using CakePHP (although now it begs me to add unit tests, etc., which increases dev time, but gives you better reliability.)
$CodeIgniter++; It's fast, lightweight and makes your workflow sooo much easier.
In my opinion, Zend Framework is the best one. It's well constructed and encourage you to use best practice to make your project more professional. It also have a emerging community which will help you every concerned issues.
I'll put in another vote for Zend Framework. I have been using it for about 6 months and have been very happy with the way it all fits together. My biggest issues has been the lack of clear cut instructions and resources but given time and this should be sorted out.
I have only worked with Cake and Zend so far, but I out rate Zend much better than Cake , Zend gives you the true power of OOPs in PHP and it also gives you MVC using actual true classes in php 5.3 unlike cake which is built in php 4.
My 10 points for Zend..
I like Yii :) or CakePHP... Zend Framework if you have a big enough team with developers
I believe the framework for each project depends on the scope itself of your current project... Let me give you two examples:
Example A: A powerful RIA which connects PHP to FLEX via AMF, uses DB via PDO or MySQL/i, would need tons of validation features, http connections and external libraries (such as Lucene) and APIs (such as Google and Twitter). And it's development will take more than a 2 months ... My answer for best framework to use: Zend Framework.
Example B: A website built upon WordPress that just needs some polishing and extra features and it's development time will take less than 3 weeks: CodeIgniter.
I'd switch according to what I really need, because Zend ain't easy to learn, CodeIgniter is quite fast to learn but might not have that much features, etc. Such as in Zend, you'll bump into hundreds of ways to do a single thing, such as trying to make a single query via PDO.... The way Zend docs say is one, then you can sort of make a hybrid of PHP-Zend way, then you can use the existing functionality for PHP but mix Zend only in certain parts... It can become a real mess specially if you have a tight deadline and are trying to learn Zend on the way...
The downside of using other frameworks (not the 'mainstream' ones such as CodeIgniter, CakePHP, Symphony and Zend) is that documentation sometimes is very scarce and so are the users, so if you hit into a problem you might spent more time searching for forums or posting questions. For a web app that would go into production mode, in which you have planned enough time for the learning curve (there's never enough...) and the reliability of the app itself is a must, I would definitely go for Zend, in case your project is more personal or don't have much time to learn, go for CodeIgniter...
Try looking at each framework docs, skip the performance and features sections, get to the dirty stuff and see what you can or can't use of each framework. At the end, if you don't find the following points in the framework you are looking at, then don't switch:
Reliability (You know there is someone, somewhere, updating the code on the framework and providing updates. It's also very helpful if there is a big company backing up the framework itself, and not just one guy in a dark basement).
It helps for specific tasks. Not because someone says Zend is the best or Symphony the fastest, you should use them, you have to look into which specific tasks would the framework help. E.g: do you use YouTube in your app and connect via the old-school stream_get_contents and then start parsing results via a JSON class you made? Zend already provides a class which makes hassle-free the connection to the you tube API and could indeed save hours of development time. This are the points that should always be looked into when looking for a framework, ask yourself 'what would I specifically use of the framework? list the features down, and compare with other frameworks...
My last suggestion, spend enough time during the research, it's better to plan ahead than to try to 'downgrade' or remove the framework during development time... http://framework.zend.com/about/casestudies
I see FUEL was not yet mentioned here. Either that or i missed it in the comments. I would like to use this framework for my new application because of alot of things:
It's the newest kid on the block, i mean, who would not want to checkout the newest kid on the block that made it to the "best php frameworks" list on some sites like devlounge?
Good Documentation - It may not be great yet, but being the new kid, you've got to comment their effort for having such clean and concise documentation. (Unlike 1 framework i'm using right now that i like very much but sucks highly on documentation)
It flaunts and boasts that it uses the best ideas out of all the best frameworks out there and avoids as much as possible the bad things that other established frameworks has. And i totally agree with it, playing with Fuel this couple of weeks has been euphoric. Just the flexibility of coding will make you bear hug Fuel if only he was in the physical world.
It doesn't lack the perks i like from the other frameworks such as community and support.
I like its' profiling. Clean, easy to understand, easy to implement. Unlike other frameworks who claim that using their profiler is easy as pie, before you know it, your scratching google for answers (or SO).
What will hold you back from using Fuel is:
As of this writing, Fuel is still in its' 3rd release candidate. An official Version 1 is not released yet.
Since Fuel is strictly PHP 5.3 and above, you might have a problem with most hosting sites because they don't readily support the version. *cough*Dinosaurs*cough* Cpanel i think also has some issues if i remember correctly but i'm not too sure about it.
If you want the best assurance of being happy you might lean to not want this because as i've said awhile ago, it's new, there are no concrete guarantees yet, the community has yet to grow and they have yet to prove themselves out in the big bad world. You'll never know if the project will shut down immediately after launching its official release. Or the softwares' development stops suddenly without warning because of alot of factors. This always comes with new stuff.
Note : Don't want to worry when it shuts or not, take the courage to move as its open-source.
Zend is good, but too bloated. I prefer lightweight. I want more control of everything. That's not the case with CI, Cake or Kohana. But there's Fat-Free . Follows the Sinatra DSL model. Self-contained, single-file. It has no ORM, but like I said, I want full control, and that includes SQL statements, that way I can optimize my database. It's got a template engine, CAPTCHA, cache for URLs and frequently-issued database queries.
What makes it different is its declarative approach to programming (it makes you feel like you're not programming in PHP at all, but that may be subjective) and the integrated JS/CSS minify feature. And all these features were squished in a 42KB file, most of it is inline documentation. http://fatfree.sourceforge.net
I am surprised nobody has voted for Lithium  yet. Lithium is a brand new framework that has a lot in common with CakePHP, but with the annoying bits improved. It has a database API that looks and acts more like Zend Framework, with find operations returning record sets and records as model instances instead of associated arrays of data.
Downside: PHP 5.3 and up required, because it uses all the fancy new stuff like late static binding, namespaces, etcetera. Also, it's still at a development stage with much documentation lacking. http://rad-dev.org/lithium
But I am getting a bit fed up with both of these, mostly because of a lack in documentation and community support.
The reason why I chose cakephp in the first place was the support for php 4, but now we have completely switched to php 5.
Both seem to have much better documentation and community support. I also like their models a lot more than the monster associative arrays of cakephp. http://cakephp.org/
I used cakephp recently. Its easy to learn and you can develop apps fast.
I used CodeIgniter then switched to Kohana.
Kohana is basically a fork of CodeIgniter. The developers cut out the PHP 4 compatibility and rewrote it to use the features of PHP 5 (full OOP)
Although Kohana 3.x is out, it's still pretty much unstable IMHO So I'd suggest using Kohana 2.x
If you understand CodeIgniter then Kohana won't be a problem neither.
Cakephp with Zend in the vendors folder for its libraries.
I use Solar  for all my development.
I can build complete database apps with admin interfaces (Browse, Read, Edit, Add, Delete) in no time flat. http://solarphp/com
My first foray into frameworks and MVC started a few years ago with CakePHP. To be honest, I found it quite difficult to understand and tried out CodeIgniter after a couple of weeks, which I picked up very easily.
After playing with CodeIgniter for a while, I then began to understand the other frameworks much better. It's got a very easy learning curve from a procedural PHP background.
I've tried pretty much all the PHP frameworks since, and although I'd dearly like to spend some time with Symfony, my choice at the moment is Yii which continues to impress me the more I use it.
Zend - I dunno, I never really got the tutorials to work properly myself. It just doesn't feel right for me I'm afraid. Like I need to wrestle with it to get what I want.
I developed for over a year with Cake PHP and found it very powerful in allowing me to quickly move from concept to prototype to production. If you are making a site which isn't going to break them mould, it has so much scaffolding already in place that you can concentrate on the parts of the site that matter.
However, for power, I am using Zend Framework a lot now. It is a lot harder to learn and slower to get a site up and running even with the command line tools it offers. But the development is moving forwards at an impressive pace and the functionality on offer is awesome but loosely-coupled enough to mean you can easily cherrypick what you need.
I haven't tried Cake PHP with ZF as a vendor as others have suggested but I imagine that would give the best of both worlds for a site that was mostly offering the standard CRUD stuff but needed the odd more complex bit of functionality.
For Performance I use DooPHP, just found out this framework recently. And I use Zend framework components with it since they share the same new BSD license. DooPHP + Zend = Performance + rich list of features
Besides the framework is really easy to get started than Yii or CodeIgniter. IMHO the database ORM in Doophp is very good.
There's no one BEST framework, we should use stuffs together in our application ;)
I agree that ZF is the better integrated into Zend Studio and the "official FW", couse of its name :) ... But when I had to decide on which framework I would have based my products Symfony beats ZF.
I think the architecture of symfony is the better implemented in a pure PHP5+ framework, expecially in symfony 1.2 the architecture is formidable.
ZF resambles much more to a very good libraries and components repository.
Symfony is a PHP-development-platform instead and a powerful framework instead.
Symfony is not for novices, it is right, but this is a positive aspect IMHO, as one of the worst problems of a "simple" language such as PHP is that non skilled people easily can write even complex applications. Those apps being of course full of bugs, security holes and so on, requiring a certain skill is a great positive aspect of a framework I think.
I have checked several frameworks, not only from the php world. Too bring it down to simple things: if you want SPEED then you should take php and take a look at yiiframework or doophp. This is not for people who want everything, but it is FAST as nothing else. BUT - and here it starts to become kind of fundamental - if you want FEATURES - that means you want something that gives you easy access to all things, computers can do, then I think PHP is not the right choice. If you need PDF generation, parsing and generation of office documents, connection, standards, multiserver-setup, standardized repositores and whole enterprise stuff you will very fast find yourself fiddling around with incomplete or really frustrating solutions. It is not the MVC that make frameworks interestng - it is what they give you in terms of power. PHP is FAST - but yu will have a major lack of good integration into anything else. In Python, Perl or Java world you get a solution for nearly every problem implemeted in a clean way that you can use with every web framework existing for these languages. Look at what you really need - simple website or an advanced service? For a SPEEDY solution php is still best way to go.
BTW: Mentioning Typo3 here is kind of a joke, I believe.
A huge +1 for Zend Framework, if you are working with larger applications or websites. There is a steep learning curve and lots of overhead, but once you get it running it's a pleasure. We've been using it for a year now with great results.
I've also had good experiences with CodeIgniter and CakePHP. I'd recommend CodeIgniter for simple MVC sites, but I ended up disliking the "core" of it, as there wasn't enough organization. CakePHP also has lots of overhead, but is awesome for CRUD applications you want to get up and running quickly. However, it forces you to use many of their conventions, so there is also a bit of a learning curve.
I've used CakePHP in a couple of production projects and it's a joy to use. The documentation for version 1.2 is in a much, much better state than it was a year ago. The reason I choose Cake over CodeIgniter is because of it's similarity to Rails (right down to the console) and the wicked ORM. There are loads of great components in the Bakery too.
* Object-oriented and highly reusable code * Event-driven programming * Separation of presentation and logic * Configurable and pluggable modular architecture * Full spectrum of database support * Feature-rich Web components: HTML input controls, validators, datagrid, wizard... * AJAX-enabled Web components * Built-in support of internationalization (I18N) and localization (L10N) * Customizable and localizable error/exception handling * Multiway message logging with filters * Generic caching modules and selective output caching * Extensible authentication and authorization framework * Security measures: cross-site script (XSS) prevention, cookie protection... * XHTML compliance * Rich documentation and strong userbase
Symfony is my answer. I had the same question a year ago and I made the Symfony choice. It is easy to learn with the superb Jobeet project. They take you on a 24 day tutorial and answer all your questions. This is a solid, good framework with tons of potential for the future. Great documentation and a large community if help is needed.
i think more often than not, your better off building a framework for the required application, rather than building an application from a framework.
Just because you use a framework doesn't make you a better coder, it makes you a better user of the particular framework you choose.
To use an anology, you wouldn't use a car to build a motorcycle.(with php as the engine)
Also you dont wont to end up being a driver of a framework rather than a framework mechanic.
CodeIgniter would be my choise. I've been using CakePHP, but after moved to CodeIgniter programming speed and performance increased.
I've been using CodeIgniter for a few commercial projects lately. It's been pretty good, taking care of the MVC stuff without much fuss and providing lots of useful helpers. One down side is the lack of a ORM out of the box though the database helper functions make creating your own quite easy. For my next application I'm going to have a look at Kohana , apparently it builds on codeigniter but using PHP 5 exclusively. Also includes its own ORM framework. http://www.kohanaphp.com/
@Flubba there are several good Zend Framework tutorials and there are also several Zend Framework books due to be released soon.
ZF Tutorials 
Thanks for the links! The first one (the akrabat tutorial ) was for a long time the only half-decent tutorial on ZF MVC, and it's better now that it's been updated for 1.5. My comments  need to be taken in the context of my experiences from January to June 2008, and you are quite right, as the framework becomes more stable there should be much better resources to come.
My main criticism of the akrabat tutorial is still that he puts too much application logic into the controller, and so it is not teaching proper MVC design principles, in my opinion. I hold to the thin controller school of thought where all the business logic should be in the model, not just data access classes.
The second resource looks neat - thanks for that, it should be helpful. As I said we use ZF at work and so it is part of my life now, regardless of my somewhat mixed experience of it. http://akrabat.com/zend-framework-tutorial/
I've just used symfony, but after I started using it, I've never been tempted to try anything else.
i'm going to be starting a new project soon and my choice is going to be zend framework with propel 1.3 as the model. I wanted a php5 frameworks and the two choices left for me were symfony and zend. I went with zend because of its integration in zend studio and the use at well architecture.
For a recent project we used the Radicore framework. To be honest, it's more a pre-built application that you plug a database into and tick off some views in it's most basic form. However there are API's (reasonably well commented) for exposing access to data.
All of these cons add up to one major problem. If you want to change the behaviour of the framework in any way, it's extremely difficult. Flow of control to various scripts is caused by requiring a specific file and having that execute inline. Often, that can happen 4-5 times in one transaction which makes changing the behaviour in the middle for certain cases is very non-trivial.
If what you're after is a CRUD application, with workflow processes and reporting built in, radicore is an excellent choice. However, if fancy UI and integrated components from other systems are required then it's probably not the right framework to use.
I've worked with CodeIgniter, Kohana, and Yii (and to a lesser extent Cake & a few others) and hands down feel the Yii was the best fit for me.
My framework of choice is http://www.pradosoft.com/ because is very similar to .net framework implementation and have namespaces like .net
Zend Framework i use for all my projects.
You can try this.
Vitche Emission PHP Framework is a non-commercial Open Source lightweight PHP Framework.
The key idea of that framework is to use central repository for keeping source code and providing all client software with an ability to do real-time source code updates. That makes the client free from the need to keeps the framework's source code.
The following features are supported in the Emission Framework:
The source code is available at: http://emission-framework.com
Also the Prado Framework is cool.
Check out this post and opensource project, it seems very interesting.
I have been working on a framework called the RDS Framework . It is the offspring of a lor of websites I made in PHP. With every website I made the system turned into a whole framework.
You can download it and give it a try, it is nicely structures and it is focused on web-development. It has some special features and structuring that is not available in some other frameworks.
There are also some extensions you can download so you can make the framework bigger to your needs.
There are also some video tutoials  and there is a documentation to get you started. http://www.rdsframework.com
The answer is almost always "it depends". I recommend writing the app first really quickly to find out where the real issues are.
I researched extensively on php frameworks, and I have no doubt: I recommend Symfony.
The Best PHP Framework: Is Symfony Really It? http://www.dustinweber.com/main-page/the-best-php-framework-is-symfony-really-it/
Top 10 List: http://www.phpframeworks.com/top-10-php-frameworks/
All I can say is the choice is really simple, 6 points to note. Have a look at this and choose for yourself http://www.christofcoetzee.co.za/zend-framework-vs-codeigniter-vs-cakephp-vs-others/
Check out Alloy Framework  - It's a new PHP 5.3+ Hierarchal MVC Framework that works a little differently than most other MVC frameworks, and is much simpler and more lightweight in nature.
The main differences to other framework projects are primarily:
Read more on the Architecture  page of the manual.
The URL Router  is also very nice and borrows a lot of concepts from Merb and Rails. http://alloyframework.org
I recommand getting a look at Yii. I am an user from Code Igniter and Yii framework impressed me a lots so far. Stuff are better handled. But that my opinion.
I'd use any framework with a good documentation and some community. What I mean with "good documentation" is something easy to browse, with links between related content and reference tables, with good working independent examples and covering all versions of the framework. I don't want a framework made to sell books or give job to consultants. Some phpdoc or doxygen generated pages is not a good enough doc.
I've used Code Igniter but the code base was using an old version with no way to upgrade it. The only doc available was for the latest version so tough luck. I looked at Symfony 1.x and backed away from the lack of clear doc easily found. I have also had to code some things for Joomla! and Drupal. Awfull documentation, and the Drupal community is lacking when you're looking at how to code some modules.
You can have the perfect modular and efficient framework ever made, if you can not jump and code right away knowing that most answers you may need can be found easily in an obvious area you missed the point of a framework. They are meant to create easily maintainable projects, any new programmer should then be able to leverage this to be efficient fast. Not spend as much time as he has spent learning php to be able to use your framework.
@Karl.. You're totally right. Our in-house framework is littered with calls to the debug_backtrace() function precisely because of the lack of late static binding.
Here is a FANTASTIC article on PHP Framework benchmarks.
Solar is the fastest of those tested.
Symfony the slowest.
Zend is the most loosely coupled and thus the most flexible.
I know it's not a "framework" per se, but I've often used Wordpress as a starting platform for when I've need to get a site off the ground quickly and when the people adding content to the site need something dead simple to navigate.
I basically strip out the "posts" and comments portion of a template so that it's no longer accessible and then everything on the site is done with "Pages". And if the user can be a little too curious, I'll remove the unneeded options from the Admin pages as well.
The other great thing about it is that, unlike Joomla or Drupal, there are massive amounts of free extensions and templates to work with, so I can almost always get something running without every having to write very much code at all.
My best experience comes from using Akelos . Until PHP 5.3/6, the lack of late static binding makes PHP frameworks a little frail, but Akelos manages to actually be a lot more OO than most. It also has a nice view syntax (sintags). http://akelos.org/
I've worked with both Solar and Zend framework and I have to say of the two I much preferred to work with Solar. The Solar framework has strong capabilities, intelligent organization, active community and is mature and tested. I exclusively use Solar for all of my PHP development.
I've made use of Zend but have never found to be quite as easy to use, or as quick for development as the Solar framework.
I am an ASP.NET developer and recently was put on a large scale PHP application. We're building from scratch not having little experience with PHP, I did alot of research and found CakePHP to be the best solution for us.
I wrote very strong prototype using CakePHP in less than a week, without books or docs (since their docs are a little weak). I've since got a few Apress books and the project continues to move ahead very smoothly.
So far, I give two thumbs up for CakePHP.
i think symfony is the best. Documentation, samples, great tools... also there is a point i want to understand, why many people copare symfony with CI. CI far far away from symfony's league. CakePhp and Symfony or ZF comparasion would be right, but CI very lightweight than others.
I really like the Zend Framework for flexibility and features on large projects. The community support is also fantastic, even compared with its much older siblings like CakePHP.
However, for small, fast projects, I highly recommend Kohana. It's based on CodeIgniter but with an extra emphasis on speed, and in my opinion, a bit more configurable. Its small community is offset by a very clean codebase.
I am using Symfony. Is a very good design.
Previously used Codeigniter, main features: support PHP 4, and productivity.
I would recommend symfony, the new 1.2 version is very feature rich.
Try out the jobeet tutorial  http://www.symfony-project.org/jobeet/1%5F2/
lately i've been using PHPFUSE  and I like it a lot. http://phpfuse.net
we have been using qcodo, but the dying community has me scared, and wondering if we should think of making a migration? I'd hate to switch frameworks mid-stream....should we stick with it?
It is NOT an internal use site, it is an external facing application.
Are we stuck with Qcodo at this point? After my initial research, it seemed like there were lots of benefits to it, but the community is as much the product as the product itself.
I would recommend using Symfony as it offers a "standard" architecture and forces the developer to use best practices and avoid PHP's pitfalls. Moreover, symfony integrates many existing components like the Propel and PHPDoctrine ORMs. It is also wonderfully documented, and features an impressive set of plugins and extensions (even ZF components can be used really easily in a symfony project). All of which enables the developer not to reinvent the wheel and code very efficiently.
I'll add my 2 cents too. First of all, it depends on your environment. Many people like hosting their applications on a shared server. If this is the case, a light-weight framework or pure OO PHP is much recommended.
But if server resources is not a problem, many options open up. I've seen Zend being recommended as a good framework by many. Codeigniter is good because it's kind of a skeleton framework. It doesn't have unnecessary magic, but it has all the libraries that you'll commonly need. The learning curve is quite small if you're experienced.
Recently, the Yii (yiiframework.com) has made a lot of progress. You might want to check this framework out. I played with it a little and it's really powerful. So before considering other frameworks like Codeigniter or Zend, try Yii to see if it does what you want.
So which PHP framework would I use... To put it bluntly: None.