This chapter introduces object-oriented programming (OOP) and explains all the object-oriented (OO) features in PHP 5. The chapter assumes no prior knowledge of OOP, so if this is your first time learning it, that's okay.
However, there's lots here for PHP 4 OO programmers, too. PHP 5, besides adding many OO bells and whistles, modifies fundamental parts of PHP 4's OO behavior. Running PHP 4 programs under PHP 5 will result in unexpected results and errors if you're not up-to-date on all the changes.
Additionally, the new features allow you to implement many OOP best practices that just aren't possible in PHP 4. This chapter shows you how and why you should modify your existing code to take full advantage of PHP 5.
Early versions of PHP were strictly procedural: you could define functions, but not objects. PHP 3 introduced an extremely rudimentary form of objects, written as a late-night hack. Back in 1997, nobody expected the explosion in the number of PHP programmers, nor that people would write large-scale programs in PHP. Therefore, these limitations weren't considered a problem.
Over the years, PHP gained additional object-oriented features; however, the development team never redesigned the core OO code to gracefully handle objects and classes. As a result, although PHP 4 improved overall performance, writing complex OO programs with it is still difficult, if not nearly impossible.
PHP 5 fixes these problems by using Zend Engine 2. The first version of the Zend Engine was written for PHP 4 to handle PHP's core functionality, such as what type of objects you can use, and to define the language's syntax.
Zend Engine 2, which powers PHP 5, enables PHP to include more advanced object-oriented features, while still providing a high degree of backward compatibility to the millions of PHP scripts already written.
If you don't have experience with object-oriented programming outside of PHP, then you're in for a bit of a surprise. While some of the new features allow you to do things more easily, many features don't let you do anything new at all. In many ways, they restrict what you can do.
Even though it seems counterintuitive, these limitations actually help you quickly write safe code because they promote code reuse and data encapsulation. These key OO programming concepts are explained throughout the chapter.