Building a Framework for Effective Development
Wrtiting less PHP code with more results
Most web development companies use their own or third party
frameworks to improve their development process. If you want to
work as a PHP developer in a company you will most probably need
to agree to write your code using their framework. This article
is for these developers and companies who want to build their
own framework and improve their coding speed, the quality of
their code and get paid more for less time. I will share with
you the ideas we discovered in PIM Team Bulgaria while working
on our PHP framework, but not the framework itself - you need to
develope your own one which to suit the most your coding style.
Our advises are valid for almost any other programming language.
What is a framework and why I need it? Don't you get
bored when you need to write same or similar types of code again
and again? Do you hate when customer wants to change "some
unsignificant thing" but you need to change it in 10 different
files? Are your scripts too long? Do you write "spagetti" code?
If you answer "yes" on some of these questions, then you need a
set of functions and classes which will automate most of the
tasks, reduce your code size and avoid copy-paste practices.
That is framework. It is a set of classes and functions which
you just include in your scripts and make your life of a web
developer easier.
What to "put" in a framework? Some people and companies
tend to believe that everything should be generated by functions
and classes and you should never have a "free flying" PHP code.
As a result of that they put everything in objects and extremly
complicated functions which try to handle everything for
everyone. As a result the code gets hard to read, buggy, hard to
change and slow to write and learn. Other group prefers to write
everything for the current situation, again and again for every
project and file. They often copy-paste hundreds of rows to save
development time and effort, but when they have to modify the
code it turns into a pain. And all of this is because they are
too lazy to create a framework. The solution as usually is
somewhere in the middle. You should be looking to optimize tasks
which are repeated often in the project or in different
projetcs. Here are the best propositions:
- Mail functions - its terrible to see most developers putting
all the headers in each place where they need to send a mail.
Just wrap the mail() function and use the wrapper.
- Database wrappers - you MUST have one. Stop using the built in
mysql (or other DB) functions directly into your projects. What
will happen if the database must be changed?
- Database functions - do you really need to type manually all
the 50 field names of that table and then to manually fill the
values from $_POST? Sure, it is often needed when the values
come in a different way. But very often, especially in admin
panels you just have a form with fields corresponding to the
table ones and values in them. Just iterate thru the database
fields (hint: "SHOW FIELDS FROM table_name") and insert/update
- HTML code snippets - aren't you tired of creating or
copy-pasting date dropdowns, checkboxes, normal dropdowns or
radio groups? Create functions for each of these - it could
accept parametters as name, values, selected name...
- Formatting specifics such as date, money, phone numbers etc.
Yes, the PHP functions like date() allow you to format in any
way. But what happens if you have dates on hundred places and
the customers decide that instead of mm/dd/yy they want format
"dd Month, YYYY"? Don't change it everywhere, don't use the
MySQL data formatting. Create your own wrapper and use it.
- Admin panels - each and every admin panel includes screens for
add/edit/delete various table contents. Why to do it each time?
In PIM Team we created a class called table_editor which simply
receives several massives and arguments and handles all the
operations on any complex DB table, including the HTML code for
the editing webform in less than 20 lines! The admin pages don't
need to look nice, but yet our table_editor allows your tables
to look perfect with CSS
- File and picture uploading, resizing, thumbnails. You don't
really write every time all the codes in your scripts I hope. It
would be crazy. You need functions or class for these
- Project sopecific functions. Many websites have specific
features like displaying category trees, specific dropdowns,
small tables with user's profiles etc etc. You can and must put
these in objects or functions and use across your porjects.
Don't overdo your framework You can't handle everything
for every case. Maybe you can but this will make your framework
heavy, slow to process and hard to use. The goal of the
framework is to make your life easier, not some idealistic idea
for pure OOP coding. You need to export functions and objects of
things which you do often within different projects or several
times in one project. You will only loose time if you try to
handle some individual cases.