So much emphasis is placed on JavaScript libraries, but with PHP all of the attention is stolen by frameworks. While frameworks are nice, they do require quite a bit of learning and some major alterations to coding style — especially MVC frameworks. But sometimes it is nice to just have an aid, a simple helping function, instead of a core foundation. That being said, here are some of the classes out there that help me get through the day to day:
- JSON-PHP - Because JSON is fun to work with when compared to XML.
- In house database class - Highly modified since then.
- Smarty - OK, this is kind of a framework, but it is standalone enough so that it doesn’t hijack your code completely.
- In house validation class - check for valid email, address, etc.
- LibMail - Every program sends mail.
- In house logging - loosely based off of Logger and the native error_log.
- A handful of less reusable code that handles authentication, files, xml, strings, and so on.
The arrangement of libraries above is quite lacking. The most obvious flaw is the lack of consistency. With that comes varying levels of documentation, stability, and a helpful development community. So when a new programmer is brought on the project, they will have to learn various information from various sources. Or even worse, when a new project is started, any code that is not object oriented will have to be rewritten or modified to accommodate the new conditions.
Two mainstream organizational solutions present themselves: frameworks and PEAR. While this may change over time, frameworks are currently not appealing to me because they control how you code, and once you begin with one you are locked in. On the surface, PEAR seems to be the ideal solution because it is a group of libraries that are all documented, maintained, and tested. However, it is quite intimidating and is slightly overkill. Or maybe PEAR is the de facto standard that is irreplaceable. Either way, it is interesting to explore additional options.
A few questions arise. Is there room for a PHP equivalent of Prototype.js? Not a clone, but a similar idea. A group of files that simplify development and are in a standalone format as seen with the script.aculo.us files. Is there something already out there other than PEAR, or any highly recommended classes out there commonly used by most PHP developers? Or is this line of thought ridiculous because frameworks already solve all of these problems?
I kind of like the new Zend Framework. Sure, you can use the MVC stuff if you want, but you certainly can use it for other stuff without it. Currently I use the Filter, DB, and Mail components. I’m looking into using some of their Auth and Registry components as well.
If you’ve never taken a look, it’s worth a few minutes of your time.
I ended up doing something along these lines a year or so ago. I looked at PEAR and ZEND and found them both a bit too heavy for my needs so I wrote my own bunch of very loosely related classes that handle strings, files, db, images, paging etc that I now use in all my projects. These link into SMARTY for rendering and it all seems to hang together pretty well. The added bonus is I understand them and they are coded in a way I am comfortable with.
In terms of third party classes I use a few including UniversalFeedCreator for RSS and PHPMailer, although this hasn’t been worked on for a while so I will definitely look at LibMail. It would be great to see classes generic enough that they could be slotted into your own PHP project without huge dependencies.
Just out of curiosity do you plug your in house validation class into SMARTY, if so can you give any further details of your approach as I have almost got to the end of the road with SMARTY Validator.
You might like phpSprockets. It abstracts HTML generation and makes possible all sorts of things - XML factories, tag modifiers and so on. It integrates nicely with other tools too.
Keir, we don’t have validation and Smarty combined for all things on the site, but all dynamic forms do have them combined. The way we handle it is by building the fields and storing them in an associative array with type, name, value, etc. Then, if there is a post back, we add error to that associate array if the postback failed validation. In Smarty, we loop through the array and draw the fields. If the error value is not null, we draw the appropriate HTML for errors for that iteration.
If you’re looking for direct integration (extending the class or something crazy like that) then no, we don’t take it that far yet.
I suspect that many of us have written functions that are already reusable or could be made reusable with a little time. Personally most of the functions I’ve written are in ASP, since I was an ASP programmer for the past three years. Some of the functions I wrote were to duplicate functionality in PHP that doesn’t exist in ASP, but others are not present in PHP and could be converted to PHP with a little time.
I’ve been unemployed for almost two weeks now and been working on my personal web site. One section of my web site is going to be for reusable functions in ASP and PHP. I’m just trying to decide how I’m going to go about it. Some functions are closely related so I feel I should put them together, while others are separate from anything else.
I would love to use a PHP equivalent of Prototype for the same reasons i prefer Prototype over Dojo. But there must be a reason that php is so framework focused rather than library focused. Right?
But speaking of frameworks. What is everyone’s opinion of CodeIgniter?
If you really want an enterprise Framework, which gives you free space about decisions which template engine and which database abstraction layer and you want to use. I use agavi, which fits perfect for ajax needs. Your actions serve the data, the views serve the template after the matched output_type. Download the sample app, give it a try. After diving into to code you will be agavi addicted :D
Maybe you should take a look at: http://ez.no/ezcomponents Then zend framework also seems to be aiming to provide a framework of classes beyond the MVC framework.
Hi Ryan,
instead of LibMail I have moved on to using PHPMailer and now recently to it’s successors SwiftMailer.
Above that I also suggest on using a Profiler class, a Database Class which returns DB_Result instances (Iterator style), a navigation class (think fancy URLS without mod_rewrite), a universal upload class with extensive functionality (think write file straight to disk, or write file to disk after inserting some data in database), etc.
wbr, B!
PHP + Smarty + JQuery = Umm, what I use. Not a lot of people talk about JQuery and imo it’s the best javascript library. Smarty is great b/c it separates code from html, the same way css separates style from html(content).
I think sometimes using a framework will overload your page and your code. so why not keep it symple and use some cool libraries like: adodb, xajax, phpmailer and some pear stuff.
There is a place for both in PHP. I use a framework, the zoopframework to be specific, when writing an application. Within that application for specific needs I use various libraries to accomplish a specific task.
The advantage of a framework is a general structure and consistency that any compilation of libraries couldn’t match. For instance, the Zoop Framework has a validation library, and also uses smarty for it’s layout, however Zoop has integrated the two providing seamless validation for both front end and back end. It does this using what Zoop calls guiControls, which appear to be based on .net’s webcontrols, but for php.
Zoop also has integrated a mail library with smarty providing template based emailing as well as plain text emailing.
This integration is why you would want to use a framework. More efficient usage of code.
Zoop can be found at http://zoopframework.com
JSON is built into PHP 5.2 now with json_decode() and json_encode() — extremely handy.
as others have already mentioned: Zend Framework. It is one of the most important things happening in the area of PHP right now. It is more cohesive. It is loosely coupled. It is(or will be) well documented. It doesn’t try to be everything for all things. It locks you in but only to a point since you can override the base classes. ZF has the elegance that PHP has needed for a very long time.
:) Thank you for a good libraries.
I firmly disagree that PEAR is overkill. The PEAR DB libraries have served me well, especially the getRow, getOne, getCol and getAssoc functions - they’ve really taken a lot of the pain out of coding to the database. Likewise, while Smarty is the sexiest girl in the room, HTML_Template_ITX is the one you marry. With these under your belt, you can venture into classes like HTML_Quickform, Text_Captcha, and the like. I’m thrilled with how well PEAR has served us in a production environ.
Has anyone checked out Picora? http://livepipe.net/projects/picora/ It seems pretty new, but I’ve used it on a small project and it’s one of the few frameworks I’ve used that really doesn’t get in the way. No libraries though, which I guess is the point.
On PEAR though. Yikes. What a nightmare. The cross dependencies, and reliance on the core PEAR class / PEAR errors (which is a giant piece o crap) totally defeat the purpose of having libraries. The code quality is also pretty bad compared to the many other independent libraries. I never use it on anything that makes it to production EVER.
Also in regards to the prototype.js comment Ryan, I don’t think there is room for quite the same thing in PHP because it isn’t prototype based, nor does it have open classes. The tight integration of iterators with pretty much every other part of the library is where prototype really shines, and you can’t do iterators with near the same ease. You could always extend ArrayObject to have each, find, reject, etc, but then you would have to pre define the callbacks you pass to the iterator, or use create_function. Yuck. A few years back I remember a debate on the PHP internals list about closures and how the core devs kept insisting they were just not useful for PHP. I still get significant mileage out of the language, but for me I knew then that long term that was the nail in the coffin for PHP.
For email, PHPMailer is getting old and has not been updated for ages (depite many users posting good patches for it). The new kid on the block is SwiftMailer (http://swiftmailer.org/) which is very clean and PHP5-savvy.
Best of all words = http://www.symfony-project.com I’ve tried alot of frameworks, and this one is simply amazing.
Smarty? Uggg…that’s pretty heavy lifting.
Hmn, Trackbacks don’t seem to be turned on … I wrote some stuff about the programmer and business reasons that people prefer frameworks when dealing with PHP.
I’ve used all sorts of frameworks and come to the realization that all they are really good for is organizing your output. I really like CakePHP, but I find it hard to use the components outside of building a web application. Where I work, we use Zend Framework and I like how there are components that you can use OUTSIDE of building a web app. I think people underestimate the power of doing that.
Terry Chay brought me around to that line of thinking as well.
For a fantastically simple and POWERFUL database class for PHP, check out ez_sql.
I, too, use a variant of ez_sql in all my projects (except I port/upgraded it to mysqli and added a few delicious functions like get_kvpair() which comes in amazingly handy for a query like
SELECT id, name FROM users
)Everyone needs a hug.
I was thinking much the same thing a while back, a PHP-DSL aimed squarely at building simple web apps would sell like hot cakes:
http://suttree.com/2006/05/15/php-dsl-cont/
I used to code from scratch, using php savant, pear, feedcreator, simplepie and some home grown code, but now I’m moving towards Drupal. I guess you’d count that as a framework.
I played with Cake a bit, but am taking a serious look at both CodeIgniter and ExpressionEngine as frameworks, along with their associated libraries.
I’m not big on PHP frameworks. But when it comes to DB interfacing, I love http://www.phpobjectgenerator.com. Apart from that though, I’m happy with plain old php and my own library of useful functions that I’ve perfected and secured over time.
which php and AJAX Library is the best…………..?
Everyone needs a hug.
I’ve just started looking at CodeIgniter as well. I attempted Cake but it was so poorly documented. Seem CodeIgniter is much better documented. I’m still not even sure that’s exactly what I need. I’m of the same opinion that it would be nice to just have libraries to use. I use jquery and it is very helpful but it would be nice to have it all serverside instead.
For small basic sites with no database, I use my own code and classes.
I use CakePHP for sites that need limited content management. I agree that it is poorly documented, but the google group is active and the gain in speed of development makes it worthwhile for me.
For community sites and sites that need a complete CMS I use Drupal, which as Robin Millette says in these comments can be counted as a framework.
Interesting post. Judging by krugle stats on php source code indexed there, there are around 370k php functions and below 100k php classes… where/how do you guys get/store your best code snippets?
Everyone needs a hug.
There seems to be some overlap as in what is considered a framework. Here is my take using examples: Frameworks
CMS
Template Engines
symfony is awsome! I have been using it for 3 months and I will never do a php project without it again.
Have you looked at the the php content management system phpCMS? it is a quite unique and flexible solution, not just a template engine…unfortunately, the development seems to have stopped…
I want to know how to develop a PHPmailer. Can anyone be of help?
I want to know how to develop a PHPmailer. Can anyone be of help? please email me; wrex001@yahoo.ca. Cheers!
What’s so special about Json anyway. I think rest->xml is way easier to understand and way more universal, plus who wants to do heavy lifting in javascript anyway. Also I think the comments on this site are really awesome.
Zebra PHP Component Framework - a lot of useful classes there.