PHP as a language supports several programming paradigms including procedural, object-oriented, and, to some extent, functional programming. In this tutorial we will talk about the fundamentals of object-oriented design and how we can apply then using PHP. Specifically, we will cover the power of interfaces, the differences between inheritance and composition, dependency injection and inversion, and the idea of the SOLID principles. Regardless of your experience with PHP and OOP you should walk out of this tutorial with a better understanding of how to apply these ideas to your projects.