Many pattern implementations in PHP felt like glorified workarounds due to limitations in the
language. These days, though, it can be hard to keep up with pace of innovation in PHP objects,
design, and project practice.
If that's a problem, well, it's the kind you want to have. Especially if you have the tools at hand to
navigate the risks and opportunities that present themselves.
PHP continues to tick items off the object-oriented developer's wish list. Since the last edition of
this book, we have seen namespaces make it into the language, late static binding, anonymous
functions, and closures (if those don't yet mean anything to you, don't worry, they're all covered by
this book). PHP is an active language, constantly evolving to meet the needs of its users.
For a developer, this presents some interesting challenges. Not least, the tension between a stable
codebase and the desire to take advantage of the goodies that every new release brings. With a good
suite of tests, preferably run automatically, tools for collaboration, and an easily installed system, you
can improve the design of your code, play with new features, and be fairly sure that you're not
And that's where this book comes in, I hope. I want to explore what's exciting, both in the
language and in the wider world of object-oriented design. At the same time, I want to take in the
tools and practices you can use to safeguard your project from the hordes of bugs that lurk beyond
sight whenever you make a change.
As well as new language features, this edition benefits from coverage of web testing with Selenium,
and the ultimate tool of tools: a Continuous Integration server that runs tests, builds your system, and
applies diagnostic tools to your project.
How real is a web application? It exists as lines of code, of course, bits stored on a computer. It
exists in its execution on a server. But really, for the developer, an application first lives in the
imagination. It is a structure made up of parts that interlock more or less elegantly. Then, if we're
lucky, it is realized and deployed, and it really comes alive at the moment someone uses it. There,
right there, is where the magic of coding lives.
That's what this book is really about. It's about taking an idea and shaping it, and the pleasure to
be found in the process. It's about the shapes of a system in your imagination, and the satisfaction
when these shapes are expressed in code. And then again when the system actually works. It's about
the freedom that tests give you to take risks, and the risks that your imagination inspires you to take.
It's the moment that something you wrote becomes real in the eyes of another.