Introduction

This article provides detailed instructions for setting up your workstation as a PHP development environment, not only for Joomla! it also should work fine for PHP development in general.

Note There are many possible configurations for doing PHP development environments. Any environment that supports the basic AMP stack (Apache, MySql, PHP), Subversion and/or Git should be fine.

Choosing a code editor

The PHP language code represented just by plain text that can be edited with simple text editors like:

Geany (opensource cross platform text editor)

Gedit (opensource code editor for linux)

Notepad++ (opensource code editor for Windows)

Apple textEditor (Apple's basic text editor)

But when you are about to work in more advanced and complex projects and need some coding assistance there is a handful of development tools called IDEs (Integrated Development Environment) these are some of them:

Some IDEs can analyze the project as a whole and build a map of relationships between the classes in use in your project giving you the opportunity to explore the project in a more comfortable and coherent way

Some IDEs can analyse the current file under edition and give you a map of the different variables, functions and classes present on the file as a shortcut to navigate through the content

Some IDEs integrate and/or let you integrate PHP debugging client under the same tool

Some IDEs integrate and/or let you integrate several kind of source code revision control clients under the same tool

Some of the advantages of simple text editors are:

This kind of editor are usually lightweight

Some of these editors are great to do quick editions

Some of these editors provide syntax coloring and basic code completion

All these advanced tools facilitate the development of PHP code, debugging, and the integration of other tools like SVN or GIT clients for source code version control under the same IDE, but for this article we are going to focus on how to configure Eclipse IDE for our PHP development environment, feel free to add more editors and document them in the following list.

Choosing a web server

To develop and test our PHP projects we need to execute the code in a web server capable of interpret PHP code and send the output to our browser, is good to know that we have a nice range of opensource tools to deploy a PHP webservers for our development environment such as:

IIS (Microsoft webserver, the PHP and MySQL services got to be installed manually)

others

All these options for web services can be used for the development of PHP projects, but for this article we are going to focus on how to configure a XAMPP server for our PHP development environment, feel free to add more web servers configuration and document them in the following list.

Choosing a Debugging tool

Debugging tools are quite useful when you are developing a PHP project and you want to study how your code behave step by step on each line execution of your code, also these debugging tools let you see the real values of variables and objects and set new values on the fly for testing purposes, you can also create expression to check the outcome without modify your code.

Old school and hardcore PHP programmers don't fraternize much with these kind of visual tools and they prefer to debug their code the old way using php:var_dump and other methods to display and analyze the output of the PHP code, is up to you what kind of tools you want to implement in your development workflow.

To empathize some of the advantages of the use of this kind of debugging tools we got:

You can stop (freeze) the execution of your PHP code any time placing a breakpoint

You can inspect the current value of variables and objects without dumping the content

You can execute the code step by step all the way from the beginning of the PHP code to the end of it and study how your application behaves under certain circumstances

You can set or modify the value of variables and object on the fly and see the results of your changes without modify the original code at all

All these options for PHP debugging can be used for the development of PHP projects, but for this article we are going to focus on how to configure Xdebug for our PHP development environment, feel free to add more debugging alternatives and document them in the following list.

Choosing a software versioning and revision control tool

Don't you hate when you are coding and suddenly by accident you just deleted a big chunk of text and there is no backups of that file to restore those important lines of code?, don't you hate when you are working with 2 or more developers in a project and everyone have a different copy of the project then comes the day of merge all those changes in one final project but everything goes wrong or the project does not want to run properly because some one just overwrite your work?, for all this problems and many more exist some nice tools to bring you the solutions you just need, some of these tools are:

All these options for software versioning and revision control can be used for the development of PHP projects, but for this article we are going to focus on how to configure GIT for our PHP development environment, feel free to add more software versioning and revision control alternatives and document them in the following list.

Choosing a project build system

To read the full definition of a project build system you can go here but in short, the project build systems help you to automatize those tedious and repetitive tasks that developers got to do in several stages of the development of a project, some of this tasks are:

Compiling source code

Packaging (such as creating installers or final compressed files of individual libraries)

Running tests

Deployment to production systems (such as automatic upgrades and/or installation)

Creating documentation and/or release notes

Looking at project build systems from another point of view we can say they are a tool to automate complex tasks or little tasks such as:

Move a file from one place to another

Compressing a folder with several files

Upload a final build to a server

Update the content of files such as XML files or some comment sections of PHP files to print the version of the last build

A simple thing like the development of a Joomla! extensions such as a simple module could need the use of a project build system to gather all the information dispersed about the module in the Joomla! folder structure and put it back to the typical package structure of a module package with a simple build command, this could save you several minutes and headaches when you try to build a module or any extension manually and misplace a file or skip one of then in the final package. Consider your self some time to learn the proper use of project build systems and make them part of your regular development workflow.

Exist several options for project build systems out there, some of those are:

All these options for project build systems can be used for the development of PHP projects, but for this article we are going to focus on how to configure Phing for our PHP development environment, feel free to add more project build systems alternatives and document them in the following list.

Choosing a project management system

Any decent project is complete without a project management system, this applications helps developers, users and community to the planning, organize and administrate the resources of the project such as time, developers, goals. More sophisticated and complete project management systems comes with issue tracking, documents & files management, wiki, forums, blogs, SCM integration and more, some of those tools are:

Some of these options are tools to control the administrative part of a almost any project like planing, resources, etc, but not all the features like code tracking, bug tracking and issue tracking, other tools like redmine got lot of features even more that some small projects needs and online services like Github gives you lots of features for free without the need of setting up a server to install the project manager.

All these options or the combination of some of them can be used for the development of PHP projects, but for this article we are going to focus on how to configure ProjectFork for our PHP development environment, feel free to add more project management systems alternatives and document them in the following list.

Other useful consideration for your future as developer

Whether you plan or not to develop extensions for Joomla or any other PHP platform, this articles gives you nice initial vision on how configure your workstation and what tools you can use to organize yourself and your project, this are very important topics to study in detail to level up your professional skills.

There is no excuse to not use one of these tools explained in this article, not even for small projects, you should always try to be as much professional as you can and you will see that the amount of problems, building, bug tracking and other common an repetitive issues will be easy to manage with your client and coworker, imagine yourself creating copies of your project over and over, and no one have a control to which one is the last version, imagine your client sending you emails or chat messages constantly to tell you about a simple bug he/she found or just want to do a modification of some specific feature like the color or the size of a html object, that is a total pain, you better configure yourself project management system to keep all those bugs ans issue well organized.

As a final note for this article here are some other important consideration for your future as developer:

Consider the possibility of host your project in the cloud with Github, SourceForge, Bitbucket and others, this services comes with a lot of nice features like, blogs, issue trackers, version control, forums and more.

Subscribe to security forums or security mailing lists

Collaborate with the documentation effort gives you direct and indirect benefits at short and long term during your career as developer

Keep an open mind and always give a try to different and new alternatives for tools as much as you can to helps your self gain knowledge and confidence when you need to chose a tool or solve a problem

Consider your self to invest some of your time as a novice developer to help others in support forums or support IRC channels, this will give you an invaluable experience to learn how to deal with real people with real problems from different parts of the world, and who knows some of them could be or will be your future clients, in other words this is a win win situation you win experience knowledge and future clients

Conserve your mouth 'Ecologic', is a bad habit from some novice developers to say this or that tool 'sucks' or 'stinks' because they don't know how to use them correctly, is not fair says that a Jackhammer 'sucks' because is really hard to nail a photo portrait to the wall with it, so try to not emit 'destructive' comments if you don't really understand how the tool operate

Documentation support and discussion

For suggestions, observations, report a bug in the code or errors in the configurations or procedures described in this document feel free to post a message in the discussion page or post a message in the following forum boards