Interview: Tom Oram and Rob Allen

Share this article

In our second interview, we talk to Tom Oram, who works for a small development firm in Wales and Rob Allen, from Nineteen Feet.

These two developers have a solid wealth of PHP experience and knowledge and have helped me refine my ideas and approaches on many occasions. With that, we’ll start with Tom.

Tom Oram

What led you to PHP?

A job. I was offered a job using a language I knew nothing about called PHP. It was PHP version 3 at the time, so much less advanced than it is now. Since then, I’ve been using PHP almost every day of my working life.

What have been the things about PHP that bit you?

In previous versions I’ve had various things which have caused confusion and frustration, most notably references and object copying in PHP 4.

However in PHP 5 I don’t really have anything that really catches me out. There are, however, things which I think could be improved or added to make the language easier and more consistent to use.

What have been the highlights or redeeming features

I guess the best thing about PHP is the speed in which you can get going. You can have an idea and very quickly try it out while at the same time it’s very well suited to larger and more complex projects as well.

What are the compelling PHP features for you?

For me I love interfaces and the fact that static typing is becoming more and more possible while still allowing dynamic typing.

What do you want to see added to the language?

  • Type hinting for scalar parameter types
  • Type hinting of return values
  • Nested classes

Why PHP over Ruby, Python, Go, etc?

Honestly I think they all have their own pros and cons. In many ways I think the other languages are designed better and are more consistent.

However if you’re used to programming in a statically typed language (especially Java) then PHP might seem easier to relate to than Python or Ruby.

Do you see yourself moving to another language in the future?

I use other languages all the time, and if a job is better suited to another language I will use that. However for web-based projects I always reach for PHP first, I currently have no intention of changing that.

Do you have a custom framework/setup?

Over the years, with different projects, I’ve used different architectures and frameworks, ranging from complete custom frameworks through to modules within an existing systems (e.g., Joomla, WordPress, etc.).

These days I tend to default to Zend Framework 2, which I’m very comfortable with, or sometimes Silex for more lightweight projects.

However when using these I don’t like to work “within” the framework but rather use the framework for a specific purpose (e.g., develop the UI with it’s MVC and form components or create the database layer with it’s DB components). I’m also a big fan of the Doctrine2 ORM library.

How have you implemented deployment?

Again it varies from project to project. My favourite approach at the moment is automatic deployment using Github and Travis CI.

Basically when a Travis build succeeds on the master branch you can set it to signal the server (via Webhooks which can then begin an update.

Sadly it’s not something I get to use everywhere and I’m still trying to work out the best ways, but I really do like automatic deployment.

What is in your standard toolchain?

What testing tips can you share?

Firstly, when working on a project always test. Never write any code unless there is a failing test somewhere! If you’re not used to this, then it can take some time, but after a while you will find it harder to write code without tests.

Secondly give phpspec a try. PHPUnit is very forgiving and when using it you can come up with all sorts of “clever” tests to test the code you’re producing.

With phpspec you can’t do this. Whenever you have some situation, where you’re struggling to write the test you need or you find you are doing some complex in your spec file, then it’s usually a sign that your code has a bad design somewhere.

Again it may be frustrating at first, but with practice your design should get better.

Are there tools you use which you can’t live without?

There are many tools which I wouldn’t like to be without, including the ones I mentioned above. But the one I really couldn’t live without (and I’m ashamed to admit it) is probably PHP’s var_dump() function.

I use it far less these days but even so, every now and then it’s just easier to work out a strange problem by dumping out the contents of some data structure than re-reading the code multiple times or starting a debugger.

How does your team work?

I work for a small company and sadly, most of the time, each developer is working on separate, individual, projects. So often, there’s not much team work involved.

We are currently trying to make more of an effort to work as a team and thankfully we’re getting opportunities to do this. When doing this, there are many (heated) discussions. We’re including pair programming often and also making sure that committed code is always reviewed by other members of the team.

We use Github and treat it much like working on a OSS project. There is a central repository for the project and each member forks the repository to their own account, they then issue Pull Requests to the main repository.

The rule is that you’re not allowed to merge your own pull request. This way code is always reviewed by a second developer.


Thanks to Tom for his feedback and opinions on all the questions. I hope you’ve gained some insight from what he’s had to say. Now, let’s turn it over to Rob Allen, core contributor to Zend Framework 2.

Rob Allen

What led you to PHP?

Back in 1999, I helped to form a guild for, the MMORPG, EverQuest. We decided we needed a website and I volunteered to write it as I already had a personal, static, HTML site.

As we needed dynamic elements to the new site, I asked around and someone recommended PHP to me. It was the last gasp of PHP 3, back in those days, and that site is still running on PHP 5.4 ,with very minor changes.

What have been the things about PHP that bit you?

Passing objects in PHP 4 would pass by value unless you explicitly de-referenced. Forgetting that used to cause me no end of trouble!

Other than that, I regularly forget that the sort methods sort in-place and so you don’t assign the result of sort() to a new variable.

What have been the highlights or redeeming features

I love how PHP thinks HTTP and web all the time. It’s very much the language for web development and does it very well.

What are the compelling PHP features for you?

There are many. My favorite feature is that it’s so widely used, that getting help on anything is very easy.

What do you want to see added to the language?

I don’t really need anything added, so I’m happy to go with the flow. I would quite like named parameters, though as I don’t have them, I don’t design methods with too many parameters!

Why PHP over Ruby, Python, Go, etc?

Nowadays, because it’s the one I know and swapping to another scripting language wouldn’t give me enough of a gain to justify swapping. I think that the main motivator for me to change language for web projects would be for a new paradigm, such as built-in parallelisation or something.

Do you see yourself moving to another language in the future?

I expect to add new languages to my arsenal. I started in C and then C++ GUI application development on Windows. Clearly C/C++ isn’t ideal for web programming, so I use PHP there. PHP is not the best for iOS or OS X development, so I use Objective-C.

I expect that I’ll learn other languages as required for the problem space that I’m trying to work in. As I’m self-employed, I’ll also learn a new language if my client asks me to, for a given project!

Do you have a custom framework/setup?

At my last company, we built our own starting-point layer on top of Zend Framework. I haven’t written enough new projects in my new job to have a need for a common starting point yet. For utility classes, I’ve started separating them out to their own repositories and putting them on Packagist so that they are easy to pull into new projects.

How have you implemented deployment?

Depends on the client’s set up. So far, all systems have used git and custom scripts.

What is in your standard toolchain?

I develop locally on my Mac, using Apache with automatic virtual hosts. I code in Sublime Text 3 with a fair few packages installed now.

All my projects are now in git which I usually use from the command line, though I’ve been playing with SourceTree too recently.

My PHP is 5.4.24 and I have the usual development tools such as Xdebug, PHPUnit, phpcs, phpmd, phpcpd all installed. I’m also using composer for package management, on new projects.

I have one client where we use Vagrant which seems to work reasonably well. For testing against IIS and also checking IE, I use VMWare Fusion.

What testing tips can you share?

Buy Chris Hartjes’ books.

Are there tools you use which you can’t live without?

Not really. I don’t tend to get so attached to tools that I can’t swap to something else if there’s a compelling reason.

How does your team work?

I’m self-employed so don’t have a team as such. In some projects I slot in as a developer among the client’s team and in others I act as a consultant to the side.

Wrapping Up

Ok, there you have it from Tom and Rob. Whilst succinct, I hope that you can pick up a lot of useful information from their feedback across the interview questions posed.

Whether it’s the strong emphasis on testing (and I’m a big advocate of Chris Hartjes’ books too), what’s good to have in a standard environment, or PHP’s key features, I hope the information today helps you and your team improve.

Matthew SetterMatthew Setter
View Author

Matthew Setter is a software developer, specialising in reliable, tested, and secure PHP code. He’s also the author of Mezzio Essentials (https://mezzioessentials.com) a comprehensive introduction to developing applications with PHP's Mezzio Framework.

InterviewPHProb allentom oren
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week