| Table of Contents | |
| Introduction | 5 |
| Chapter 1: Why Read This Book | 6 |
| Why Read This Book | 7 |
| Sample Job Description: Jr. PHP Developer | 7 |
| The Eight Primary Categories of JQuery Features | 7 |
| Why Learn Object Oriented PHP | 8 |
| Six Primary Advantages to Learning Object Oriented Programming | 8 |
| Setting Up Your Development Stack | 8 |
| AMP, XAMP/WAMP, MAMP, LAMP | 9 |
| Zend Server CE Download (MySQL, Apache, PHP, and ZendServer), System Requirements & Installation | 10 |
| MySQL Workbench 5.2 CE Download & Installation | 12 |
| Setting Up Your Integrated Development Environment (IDE) | 13 |
| Eclipse PDT (Helios Release) Download & Installation | 13 |
| Chapter 2: PHP Objects & Classes | 16 |
| Overview – The Confusion of First Learning Object Oriented Theory | 17 |
| Explanation of a Class | 18 |
| Explanation of an Object | 19 |
| Instantiation | 19 |
| $this Variable | 20 |
| Access Modifiers | 20 |
| Inheritance | 22 |
| Method Overriding | 22 |
| Invoking Parent Methods | 23 |
| Horizontal Inheritance - Using Traits | 24 |
| Encapsulation | 25 |
| Polymorphism | 25 |
| Polymorphism vs. Method Overloading | 25 |
| Polymorphism vs. Method Overriding | 25 |
| Late Binding / Dynamic Binding | 26 |
| Chapter 3: PHP Magic Methods | 28 |
| __construct() | 29 |
| Invoking Parent Constructor and Destructor | 29 |
| __destruct() | 30 |
| __get(), __set(), __isset() | 30 |
| __call() | 32 |
| __sleep() | 33 |
| __wakeup() | 34 |
| __clone() | 35 |
| Chapter 4: Abstract Classes & Methods | 37 |
| abstract Keyword | 38 |
| Extending sub-classes from an Abstract Base Class | 39 |
| Abstract Methods | 40 |
| final Keyword | 41 |
| Chapter 5: Interfaces | 42 |
| PHP Interfaces | 43 |
| Explanation of What Interfaces Are and Why They are Useful | 43 |
| interface & implements Keywords | 45 |
| Implementing Multiple Interfaces | 46 |
| Programming to the Interface | 46 |
| Design-by-Contract | 50 |
| Chapter 6: Static Methods & Properties | 50 |
| The static Modifier | 51 |
| The Scope Resolution Operator | 52 |
| Static Properties | 59 |
| Static Methods | 60 |
| Singleton Pattern | 60 |
| Late Static Binding | 62 |
| The static Keyword vs. the self Keyword | 63 |
| Chapter 7: PHP Error Control & Exception Handling | 62 |
| The Built-in Exception Class | 63 |
| Throwing an Exception | 63 |
| The try-catch-finally Block | 66 |
| Setting the Desired Error Sensitivity Level | 66 |
| Setting Error Reporting | 67 |
| Error Reporting Sensitivity Levels | 67 |
| Displaying Startup Errors | 67 |
| Logging Errors | 67 |
| Identifying the Log File | 67 |
| Setting the Maximum Log Line Length | 67 |
| Ignoring Repeated Errors | 67 |
| Ignoring Errors Originating from the Same Location | 67 |
| Storing Most Recent Error in a Variable | 68 |
| Opening the Logging Connection | 68 |
| Logging Options | 68 |
| Closing the Logging Connection | 69 |
| Chapter 8: The Model, View, Controller Design Pattern | 75 |
| Understanding the Model-View-Controller Design Pattern | 76 |
| Model | 76 |
| View | 76 |
| Controller | 76 |
| The MCV URL Structure & URL Mapping | 76 |
| Using the .htaccess File | 76 |
| The index.php File | 77 |
| The MVC Folder Structure | 77 |
| Custom MVC Application - Restaurant Menu Management Application | 77 |
| Showing the Menu | 81 |
| Adding a Menu Item | 89 |
| Assigning a Menu Item to a Menu | 93 |
| Editing/Deleting Menu Items | 97 |
| Download the Source Code for the Custom MVC Application (Restaurant Menu Management Application) | 101 |
| Chapter 9: The Reflection API | 102 |
| Using the export Method | 104 |
| The Reflection Class | 104 |
| Chapter 10: The PEAR Library | 109 |
| Overview of PEAR | 110 |
| Install PEAR on a Zend Framework Environment on Windows | 110 |
| Install PEAR on a Windows XAMPP Environment | 112 |
| Install PEAR on a Windows WAMP Environment | 113 |
| Install PEAR on a Mac OS | 113 |
| Install PEAR on Linux | 114 |
| PEAR CAPTCHA Example | 114 |
| Chapter 11: Unit Testing with PHPUnit | 119 |
| Overview of Unit Testing with PHPUnit | 120 |
| Installing PHPUnit | 121 |
| Install PHPUnit on Windows in Zend Framework Environment | 121 |
| Install PHPUnit on Windows in XAMPP Environment | 121 |
| Install PHPUnit on a Mac OS | 121 |
| Install PHPUnit on Linux | 121 |
| Test fixtures | 121 |
| Test Phases | 122 |
| Writing Test Cases | 122 |
| Assertion Methods | 122 |
| Testing Data from HTML Form Submissions | 127 |
| Test suites | 127 |
| Mocks and Stubs | 128 |
| TestCase Matcher Methods | 129 |
| Running PHPUnit from Eclipse Without Plug-ins | 130 |
| Chapter 12: SVN - Source Code Management with Subversion | 132 |
| Windows | 134 |
| Setting Up a Subversion Server and Client on Windows | 136 |
| Adding Your Source Code the First Time | 138 |
| Creating a Copy to Work On | 138 |
| Updating and Committing Your Working Copy | 138 |
| Setting up TortoiseSVN | 138 |
| Trunk, Tags & Branches | 140 |
| Exporting a Release | 144 |
| Tagging & Branching a File | 144 |
| Mac OS X | 145 |
| Setting Up a Subversion Server and Client on Mac OS X | 145 |
| Download Subversion | 145 |
| Unpack and Install Subversion | 145 |
| Add Subversion to Your Path | 145 |
| Setting up the Subversion Repository | 145 |
| Creating a Subversion Project | 144 |
| Checking Out Files from Subversion | 144 |
| Updating and Committing Changes | 145 |
| Adding and Removing Files and Directories | 145 |
| Tagging & Exporting a Release | 146 |
| Branching & Merging a Project | 146 |
| Graphical User Interfaces | 148 |
| Linux | 148 |
| Setting Up a Subversion Server on a Linux Server | 148 |
| Download Subversion | 149 |
| Setting up the Subversion Repository | 149 |
| Creating a Subversion Project | 150 |
| Checking Out Files from Subversion | 150 |
| Updating and Committing Changes | 151 |
| Adding and Removing Files and Directories | 151 |
| Tagging & Exporting a Release | 152 |
| Branching & Merging a Project | 153 |
| Summary | 157 |
| Appendix A | 159 |
| Bibliography | 159 |
| Books | 159 |
| Websites | 159 |