A collection of resources to learn object-oriented programming and related concepts for PHP developers.
# Learning OOP in PHP
A collection of resources to learn object-oriented programming and related concepts for PHP developers.
Please see [CONTRIBUTING](CONTRIBUTING.md) for details and contribute. ;)

- [Tutorials](#tutorials)
    - [OOP Fundamentals](#oop-fundamentals)
    - [OOP Advanced](#oop-advanced)
    - [Object Oriented Design](#object-oriented-design)
    - [Design Patterns](#design-patterns)
    - [Refactoring](#refactoring)
    - [Architecture](#architecture)
    - [Miscellaneous](#miscellaneous)
- [Videos](#videos)
- [Slides](#slides)
- [Courses](#courses)
- [Books](#books)
- [Some Questions](#some-questions)

## Tutorials

### OOP Fundamentals
*Object-oriented programming fundamentals tutorials.*

* [Object Introduction (&#9658;)](https://www.youtube.com/watch?v=BXyUuMWoQ60) - An introduction about objects and related concepts.
* [Intro To Object Associations (&#9658;)](https://www.youtube.com/watch?v=gTQgkkUo1Ro) - An introduction about object associations.
* [Object-Oriented Programming (&#9658;)](https://www.youtube.com/watch?v=lbXsrHGhBAU) - An introduction about object-oriented programming in general.
* [Getting Started with OOP in PHP (&#9658;)](https://www.youtube.com/watch?v=qlF1MuHlZ4Q) - Object-oriented programming introduction in PHP.
* [Beginning OOP in PHP (&#9658;)](https://www.youtube.com/watch?v=oroX19Ie6nw) - Another object-oriented programming introduction in PHP.
* [Intermediate OOP in PHP (&#9658;)](https://www.youtube.com/watch?v=KHkk6Lf-_xQ) - Intermediate concepts about object-oriented programming in PHP.
* [PHP OOP Tutorials (&#9658;)](https://www.youtube.com/playlist?list=PL75B9D91CD69ED950) - Tutorials about OOP, Design Patterns and MVC.
* [PHP Object Oriented Programming Fundamentals (&#9658;$)](https://code.tutsplus.com/courses/php-object-oriented-programming-fundamentals) - An introduction course about object-oriented programming in PHP.
* [OOP Official PHP Reference](http://php.net/manual/en/language.oop5.php) - PHP official reference about object-oriented programming.
* [Object-Oriented PHP for Beginners](https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762) - A tutorial about OOP in PHP for beginners.
* [Introduction to OOP Concepts and More](http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep) - A tutorial about OOP and an introduction to UML and Design Patterns.
* [From Procedural to Object Oriented PHP](https://code.tutsplus.com/tutorials/from-procedural-to-object-oriented-php--net-32853) - A tutorial from procedural to object-oriented programming in PHP.
* [OOP vs Procedural Code](http://blog.ircmaxell.com/2012/07/oop-vs-procedural-code.html) - Difference between OOP and procedural code.

### OOP Advanced
*Object-oriented programming advanced tutorials.*

* [What Are Abstract Classes?](http://culttt.com/2014/03/26/abstract-classes/) - A tutorial explaining abstract classes in PHP.
* [Abstract Classes and Interfaces (&#9658;)](https://www.youtube.com/watch?v=AU07jJc_qMQ) - Introduction about abstract classes and interfaces.
* [When should I code to an Interface?](http://culttt.com/2014/04/02/code-interface/) - A tutorial explaining what is and when to use interfaces in PHP.
* [Understanding and Applying Polymorphism in PHP](https://code.tutsplus.com/tutorials/understanding-and-applying-polymorphism-in-php--net-14362) - A tutorial explaining about abstract classes, interfaces and polymorphism in PHP.
* [Inheritance and Polymorphism Concepts (&#9658;)](https://www.youtube.com/watch?v=A8Ztfuq96t4) - An introduction about inheritance and polymorphism.
* [Beyond Inheritance](http://blog.ircmaxell.com/2013/11/beyond-inheritance.html) - A tutorial explaining what is inheritance and its types.
* [The Clean Code Talks - Inheritance, Polymorphism, & Testing (&#9658;)](https://www.youtube.com/watch?v=4F72VULWFvc) - A tutorial about polymorphism and how it affects testing.
* [PHP Namespaces Explained](http://daylerees.com/php-namespaces-explained) - A tutorial explaining how namespaces works in PHP.
* [PHP Namespaces](http://www.sitepoint.com/php-namespaces/) - A tutorial explaining what is and how namespaces works in PHP.
* [PHP Namespaces in 120 Seconds Tutorial (&#9658;)](http://knpuniversity.com/screencast/php-namespaces-in-120-seconds) - A 120 seconds long tutorial explaining what is and how to use namespaces in PHP.
* [PSR-Huh?](https://code.tutsplus.com/tutorials/psr-huh--net-29314) - An introduction about PSR standards.
* [Autoloading in PHP and the PSR-0 Standard](http://www.sitepoint.com/autoloading-and-the-psr-0-standard/) - An introduction about what is autoloading in PHP and the PSR-0 standard.
* [Battle of the Autoloaders: PSR-0 vs. PSR-4](http://www.sitepoint.com/battle-autoloaders-psr-0-vs-psr-4/) - A tutorial explaining the difference between PSR-0 and PSR-4 autoloader standards.
* [PSR-4 Autoloading (&#9658;$)](https://laracasts.com/lessons/psr-4-autoloading) - A tutorial explaining PSR-4 autoloader standard.
* [How Static Works in PHP (&#9658;)](https://www.youtube.com/watch?v=hbbdyyN9MRU) - An introduction on how static members work in PHP.
* [When to Use Static Methods](http://verraes.net/2014/06/when-to-use-static-methods-in-php/) - A tutorial explaining when to use static methods in PHP.
* [PHP Exceptions](https://code.tutsplus.com/tutorials/the-ins-and-outs-of-php-exceptions--net-22274) - An introduction about exceptions in PHP.
* [When should you use an Exception?](http://culttt.com/2014/04/09/use-exception/) - A tutorial explaining when to use exceptions in PHP.
* [Error Handling in PHP](http://www.sitepoint.com/error-handling-in-php/) - An introduction about error handling in PHP and exceptions.
* [What are PHP Magic Methods?](http://culttt.com/2014/04/16/php-magic-methods/) - A tutorial explaining what is magic methods and examples on how to use them in PHP.
* [Magic Methods and Predefined Constants in PHP](http://www.sitepoint.com/magic-methods-and-predefined-constants-in-php/) - A tutorial about magic methods and predefined constants in PHP.
* [What are PHP Traits?](http://culttt.com/2014/06/25/php-traits/) - A tutorial explaining what is and how to use traits in PHP.
* [Using Traits in PHP 5.4](http://www.sitepoint.com/using-traits-in-php-5-4/) - Another tutorial explaining what is and how to use traits in PHP.
* [The PHP Reflection API (&#9658;)](https://www.youtube.com/playlist?list=PLfdtiltiRHWG0__5Jb1HDaDgt2PeYjvU6) - A tutorial explaining the PHP Reflection API.
* [What is Reflection in PHP?](http://culttt.com/2014/07/02/reflection-php/) - A tutorial explaining what is, when to use and some samples about reflection in PHP.
* [Reflection in PHP](https://code.tutsplus.com/tutorials/reflection-in-php--net-31408) - Another tutorial about reflection in PHP.
* [UML 2.0 Tutorial (&#9658;)](https://www.youtube.com/playlist?list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc) - An introduction tutorial about UML.
* [UML](http://sourcemaking.com/uml) - Another introduction tutorial about UML.
* [Composer Primer](http://daylerees.com/composer-primer) - A complete tutorial about what is and how to use Composer.
* [Easy Package Management With Composer](https://code.tutsplus.com/tutorials/easy-package-management-with-composer--net-25530) - An introduction about Composer.
* [Better Workflow in PHP With Composer, Namespacing, and PHPUnit](https://code.tutsplus.com/tutorials/better-workflow-in-php-with-composer-namespacing-and-phpunit--net-29384) - An introduction tutorial explaining how to use Composer, namespaces and PHPUnit in a PHP project.
* [PHP Testing Basics (&#9658;)](https://code.tutsplus.com/courses/php-testing-basics) - An introduction about tests in PHP.
* [Test-Driven PHP in Action (&#9658;$)](https://code.tutsplus.com/courses/test-driven-php-in-action) - An introduction about test-driven development in PHP.
* [OOP in PHP With Tests (&#9658;$)](https://code.tutsplus.com/courses/oop-in-php-with-tests) - A tutorial about OOP in PHP with tests.
* [Introduction to PhpDoc](http://www.sitepoint.com/introduction-to-phpdoc/) - An introduction about code documentation in PHP.
* [PHP & Enums (&#9658;)](https://www.youtube.com/watch?v=kdWRyl6x6JQ) - An introduction about enums in PHP.
* [Type Hinting in PHP](http://www.sitepoint.com/type-hinting-in-php/) - An introduction about type hinting in PHP.
* [Introduction to Static and Dynamic Typing](http://www.sitepoint.com/typing-versus-dynamic-typing/) - A tutorial explaining static and dynamic typing in programming.
* [Annotations in PHP: They Exist! (&#9658;)](https://www.youtube.com/watch?v=oDVspbFgDCo) - An introduction to annotations in PHP.

### Object-Oriented Design
*Object-oriented design tutorials.*

* [Object-Oriented Design in PHP (&#9658;$)](https://code.tutsplus.com/courses/object-oriented-design-in-php) - An introduction to object-oriented design in PHP.
* [Object Oriented Design Cheat Sheet](http://www.cheatography.com/david/cheat-sheets/object-oriented-design/) - A cheat sheet about object-oriented design.
* [Principles Of Object Oriented Design](http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign) - An introduction to some principles about object-oriented design.
* [Foundations Of OO Design](http://blog.ircmaxell.com/2014/10/foundations-of-oo-design.html) - Some thoughts about object-oriented design.
* [How to Write Code That Embraces Change](https://code.tutsplus.com/articles/how-to-write-code-that-embraces-change--net-29716) - An introduction to OOD principles like cohesion, orthogonality, coupling, SOLID and others.
* [Build seven good object-oriented habits in PHP](http://www.ibm.com/developerworks/library/os-php-7oohabits/) - A tutorial about good habits in OOP in PHP.
* [3 Key Software Principles You Must Understand](https://code.tutsplus.com/tutorials/3-key-software-principles-you-must-understand--net-25161) - An introduction to DRY, KISS and YAGNI principles.
* [From STUPID to SOLID Code!](http://williamdurand.fr/2013/07/30/from-stupid-to-solid-code/) - An introduction to SOLID principles.
* [Don't be STUPID: GRASP SOLID!](http://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html) - An introduction to SOLID principles in PHP.
* [Don't Be Stupid, Grasp Solid - Slides](http://blog.ircmaxell.com/2012/05/dont-be-stupid-grasp-solid-slides.html) - An introduction to SOLID and other OOD principles in PHP.
* [The SOLID Principles](https://code.tutsplus.com/series/the-solid-principles--cms-634) - A series of tutorials about SOLID principles in PHP.
* [The Single Responsibility Principle](http://www.sitepoint.com/the-single-responsibility-principle/) - An introduction to Single Responsibility Principle in PHP.
* [The Open/Closed Principle](http://www.sitepoint.com/the-open-closed-principle/) - An introduction to Open/Closed Principle in PHP.
* [Constructors and Breaking the Liskov Substitution Principle](http://www.sitepoint.com/constructors-and-the-myth-of-breaking-the-lsp/) - An introduction to Liskov Substitution Principle in PHP.
* [Inversion of Control – The Hollywood Principle](http://www.sitepoint.com/inversion-of-control-the-hollywood-principle/) - An introduction to Inversion of Control Principle in PHP.
* [The Dependency Inversion Principle](http://www.sitepoint.com/dip-intro/) - An introduction to Dependency Inversion Principle in PHP.
* [SRP: The Single Responsibility Principle](http://www.objectmentor.com/resources/articles/srp.pdf) - An article explaining the Single Responsibility Principle.
* [The Open-Closed Principle](http://www.objectmentor.com/resources/articles/ocp.pdf) - An article explaining the Open/Closed Principle.
* [The Liskov Substitution Principle](http://www.objectmentor.com/resources/articles/lsp.pdf) - An article explaining the Liskov Substitution Principle.
* [The Interface Segregation Principle](http://www.objectmentor.com/resources/articles/isp.pdf) - An article explaining the Interface Segregation Principle.
* [The Dependency Inversion Principle](http://www.objectmentor.com/resources/articles/dip.pdf) - An article explaining the Dependency Inversion Principle.
* [Inversion of Control Containers and the Dependency Injection Pattern](http://martinfowler.com/articles/injection.html) - An article about Inversion of Control Containers and the Dependency Injection Pattern.
* [DIP in the Wild](http://martinfowler.com/articles/dipInTheWild.html) - An article about Dependency Inversion Principle.
* [Reducing Coupling](http://martinfowler.com/ieeeSoftware/coupling.pdf) - An article about reducing coupling.
* [Tell Don't Ask](https://pragprog.com/articles/tell-dont-ask) - An introduction to Tell Don't Ask principle.
* [Introduction to the Law of Demeter](http://www.sitepoint.com/introduction-to-the-law-of-demeter/) - An introduction to the Law of Demeter.
* [You Aren't Gonna Need It](http://www.c2.com/cgi/wiki?YouArentGonnaNeedIt) - An introduction to YAGNI principle.
* [Premature Optimization](http://www.c2.com/cgi/wiki?PrematureOptimization) - An introduction to Premature Optimization anti-pattern.
* [Primitive Obsession](http://c2.com/cgi/wiki?PrimitiveObsession) - An introduction to Primitive Obsession anti-pattern.
* [God Class](http://c2.com/cgi/wiki?GodClass) - An introduction to God Class anti-pattern.
* [Object Calisthenics](http://williamdurand.fr/2013/06/03/object-calisthenics/) - An introduction to Object Calisthenics.
* [Your code sucks, let's fix it!](http://slideshare.net/rdohms/object-calisthenicstek13) - An introduction to Object Calisthenics in PHP.
* [Domain-Driven Design](https://code.tutsplus.com/tutorials/domain-driven-design--net-25773) - An introduction to Domain-Driven Design.
* [The Null Object Pattern - Polymorphism in Domain Models](http://www.sitepoint.com/the-null-object-pattern-polymorphism-in-domain-models/) - An introduction to the Null Object Pattern in PHP.
* [An Introduction to Services](http://www.sitepoint.com/an-introduction-to-services/) - An introduction to Services in PHP.
* [Evolving Toward a Persistence Layer](https://code.tutsplus.com/tutorials/evolving-toward-a-persistence-layer--net-27138) - An introduction to Persistence Layer implementation in PHP.
* [Building a Domain Model – An Introduction to Persistence Agnosticism](http://www.sitepoint.com/building-a-domain-model/) and [Building a Domain Model – Integrating Data Mappers](http://www.sitepoint.com/integrating-the-data-mappers/) - A tutorial about creating a Domain Model in PHP.
* [Handling Collections of Aggregate Roots – the Repository Pattern](http://www.sitepoint.com/handling-collections-of-aggregate-roots/) - An introduction to the Repository Pattern in PHP.
* [Value Objects](http://richardmiller.co.uk/2014/11/06/value-objects/) - An introduction to Value Objects in PHP.
* [What is the difference between Entities and Value Objects?](http://culttt.com/2014/04/30/difference-entities-value-objects/) - A tutorial explaining the difference between Entities and Value Objects.
* [What’s the difference between Active Record and Data Mapper?](http://culttt.com/2014/06/18/whats-difference-active-record-data-mapper/) - A tutorial explaining the difference between Active Record and Data Mapper patterns.
* [Managing Class Dependencies: An Introduction to Dependency Injection, Service Locators, and Factories, Part 1](http://www.sitepoint.com/managing-class-dependencies-1/) and [Managing Class Dependencies: An Introduction to Dependency Injection, Service Locators, and Factories, Part 2](http://www.sitepoint.com/managing-class-dependencies-2/) - An introduction to Dependency Injection, Service Locators and Factories.
* [Money Pattern: The Right Way to Represent Value-Unit Pairs](https://code.tutsplus.com/tutorials/money-pattern-the-right-way-to-represent-value-unit-pairs--net-35509) - An introduction to the Money Pattern in PHP.
* [Working with Money and Currency in PHP](http://culttt.com/2014/06/04/working-money-currency-php/) - A tutorial about how to work with Money and Currency in PHP.
* [Working with Products, Orders and Sales in PHP](http://culttt.com/2014/06/11/working-products-orders-sales-php/) - A tutorial about how to work with Products, Orders and Sales in PHP.
* [Reusing Implementation – a Walk-through of Inheritance, Composition, and Delegation](http://www.sitepoint.com/reusing-implementation-a-walk-through-of-inheritance-composition-and-delegation/) - A tutorial about code reusing and OOP in PHP.
* [Design Tech Talk Series Presents: OO Design for Testability (&#9658;)](https://www.youtube.com/watch?v=acjvKJiOvXw&index=8&list=PL693EFD059797C21E) - A talk about Object-Oriented Design a testability.
* [The Clean Code Talks - Don't Look For Things! (&#9658;)](https://www.youtube.com/watch?v=RlfLCWKxHJ0) - Another talk about Object-Oriented Design a testability.
* [Programming With Anthony - Paradigm Soup (&#9658;)](http://blog.ircmaxell.com/2012/11/programming-with-anthony-paradigm-soup.html) - An introduction to programming paradigms and its differences.
* [Programming With Anthony - Dependency Injection (&#9658;)](http://blog.ircmaxell.com/2013/01/dependency-injection-programming-with.html) - An introduction to Dependency Injection.
* [What is Dependency Injection?](http://fabien.potencier.org/article/11/what-is-dependency-injection) - An introduction to Dependency Injection in PHP.
* [Dependency Injection with PHP 5.3](http://www.slideshare.net/fabpot/dependency-injection-in-php-5354) - Slides about Dependency Injection in PHP.
* [Why use a Dependency Injection Container?](http://richardmiller.co.uk/2011/07/07/dependency-injection-moving-from-basics-to-container/) - A tutorial of what is and when to use a Dependency Injection Container.
* [Dependency Injection with Pimple](http://www.sitepoint.com/dependency-injection-with-pimple/) - An introduction to Dependency Injection and how use Pimple for that.
* [Dependency Injection Is Not The Same As The Dependency Inversion Principle](http://lostechies.com/derickbailey/2011/09/22/dependency-injection-is-not-the-same-as-the-dependency-inversion-principle/) - A tutorial explaining the difference between Dependency Injection and Dependency Inversion Principle.
* [Catalog of Patterns of Enterprise Application Architecture](http://martinfowler.com/eaaCatalog/index.html) - A catalog of Patterns of Enterprise Application Architecture.

### Design Patterns
*Design patterns tutorials.*

* [Design Patterns](http://sourcemaking.com/design_patterns) - A complete tutorial about design patterns.
* [A Beginner's Guide to Design Patterns](https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns--net-12752) - An introduction tutorial to design patterns.
* [Design Patterns - Programming With Anthony (&#9658;)](http://blog.ircmaxell.com/2013/02/design-patterns-programming-with-anthony.html) - An introduction to design patterns.
* [Beyond Design Patterns](http://blog.ircmaxell.com/2013/09/beyond-design-patterns.html) - Another introduction tutorial to design patterns.
* [The Whens and Whys for PHP Design Patterns](https://code.tutsplus.com/tutorials/the-whens-and-whys-for-php-design-patterns--net-27862) - A tutorial explaining why and when use design patterns in PHP.
* [Design Patterns Workshop (&#9658;)](https://www.youtube.com/watch?v=0L1pgDPt8U8) - A workshop about design patterns in PHP.
* [Design Patterns Video Tutorial (&#9658;)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) - A series about design patterns.
* [PHP Design Patterns - Elements of Reusable Object-Oriented Software (&#9658;)](https://www.youtube.com/playlist?list=PLGJDCzBP5j3xGaW0AGlaVHK2TMEr2XkP9) - A series about design patterns in PHP.
* [Agile Design Patterns (&#9658;$)](https://code.tutsplus.com/courses/agile-design-patterns) - A series about design patterns in PHP.
* [Design Patterns in PHP (&#9658;$)](http://www.lynda.com/PHP-tutorials/Design-Patterns-PHP/186870-2.html) - Another series about design patterns in PHP.
* [Introduction to Design Patterns with PHP](https://speakerdeck.com/hhamon/introduction-to-design-patterns-with-php) - An introduction slide to SOLID and design patterns in PHP.
* [Database Design Patterns](https://speakerdeck.com/hhamon/database-design-patterns-with-php-53) - A slide about database design patterns in PHP.
* [Design Patterns PHP](https://github.com/domnikl/DesignPatternsPHP) - A collection of design patterns and some code implementation in PHP.
* [Anti Patterns](http://sourcemaking.com/antipatterns) - A complete tutorial about anti patterns.
* [Design Patterns with PHP - Adapters](http://grossi.io/2013/design-patterns-with-php-adapters/) - A tutorial about Adapter pattern in PHP.
* [Practical Aspects of the Adapter Pattern](http://www.sitepoint.com/practical-aspects-of-the-adapter-pattern/) - Another tutorial about Adapter pattern in PHP.
* [Understanding the Command Design Pattern](http://www.sitepoint.com/understanding-the-command-design-pattern/) - A tutorial about Command pattern in PHP.
* [Understanding the Observer Pattern](http://www.sitepoint.com/understanding-the-observer-pattern/) - A tutorial about Observer pattern in PHP.
* [Iterators - Programming With Anthony (&#9658;)](http://blog.ircmaxell.com/2013/01/todays-programming-with-anthony-video.html) - An introduction to Iterator pattern in PHP.
* [Iterators in PHP (&#9658;)](https://www.youtube.com/watch?v=t7KLwA52K7Y) - A talk about iterators in PHP.
* [Mediators - Programming With Anthony](http://blog.ircmaxell.com/2013/01/mediators-programming-with-anthony.html) - An introduction to Mediator pattern.
* [Manage Complexity with the Facade Pattern](http://www.sitepoint.com/manage-complexity-with-the-facade-pattern/) - An introduction to Facade pattern in PHP.
* [What are the benefits of using Repositories?](http://culttt.com/2014/09/08/benefits-using-repositories/) - An introduction to Repository pattern in PHP.
* [The Repository Design Pattern](https://code.tutsplus.com/tutorials/the-repository-design-pattern--net-35804) - A complete tutorial about Repository pattern in PHP.
* [An Introduction to the Front Controller Pattern, Part 1](http://www.sitepoint.com/front-controller-pattern-1/) and [An Introduction to the Front Controller Pattern, Part 2](http://www.sitepoint.com/front-controller-pattern-2/) - An introduction to Front Controller pattern in PHP.
* [The Template Method Pattern - Override Strategy Logic](http://www.sitepoint.com/overriding-strategy-logic-the-template-method-pattern/) - An introduction to Template method in PHP.
* [What is the Factory Method Design Pattern?](http://culttt.com/2014/03/19/factory-method-design-pattern/) - An introduction to Factory pattern in PHP.
* [What is the Decorator Pattern?](http://culttt.com/2014/04/23/decorator-pattern/) - An introduction to Decorator pattern in PHP.

### Refactoring
*Refactoring tutorials.*

* [Refactoring](http://sourcemaking.com/refactoring) - A complete tutorial guide about refactoring.
* [Code Refactoring (&#9658;)](https://www.youtube.com/playlist?list=PLGLfVvz_LVvSuz6NuHAzpM52qKM6bPlCV) - A series about code refactoring.
* [Clean Code Refactoring (&#9658;)](https://www.youtube.com/watch?v=3oVNbNaitRA) - A talk about refactoring and clean code in PHP.
* [Refactoring Legacy Code](https://code.tutsplus.com/series/refactoring-legacy-code--cms-633) - A tutorial series about refactoring legacy code with examples.
* [Detecting Code Smells (&#9658;$)](https://code.tutsplus.com/courses/detecting-code-smells) - A series about code smells in PHP.
* [Techniques for Refactoring Code (&#9658;$)](https://code.tutsplus.com/courses/techniques-for-refactoring-code) - A series about refactoring code in PHP.
* [Workflows of Refactoring (&#9658;)](https://www.youtube.com/watch?v=vqEg37e4Mkw) - A talk about workflows of refactoring.
* [Beyond Clean Code](http://blog.ircmaxell.com/2013/11/beyond-clean-code.html) - An introduction about clean code.
* [Catalog of Refactorings](http://refactoring.com/catalog/index.html) - A catalog of refactorings.

### Architecture
*Architecture tutorials.*

* [Create Your Own PHP Framework](http://fabien.potencier.org/article/50/create-your-own-framework-on-top-of-the-symfony2-components-part-1) - A series of articles on how to create your own PHP framework.
* [Creating Your Own MVC Series (&#9658;)](https://www.youtube.com/playlist?list=PL7A20112CF84B2229) - Another series on how to create your own PHP framework.
* [A Beginner's Guide To MVC For The Web](http://blog.ircmaxell.com/2014/11/a-beginners-guide-to-mvc-for-web.html) - A tutorial about MVC for the web.
* [The MVC Pattern and PHP, Part 1](http://www.sitepoint.com/the-mvc-pattern-and-php-1/) and [The MVC Pattern and PHP, Part 2](http://www.sitepoint.com/the-mvc-pattern-and-php-2/) - An introduction tutorial about MVC pattern.
* [Alternatives To MVC](http://blog.ircmaxell.com/2014/11/alternatives-to-mvc.html) - An introduction to alternative architectures to MVC.
* [N-Tier Architecture - An Introduction](http://blog.ircmaxell.com/2012/08/n-tier-architecture-introduction.html) - An introduction to n-tier architecture.
* [Hexagonal Architecture](http://fideloper.com/hexagonal-architecture) - An introduction to Hexagonal Architecture in PHP.

### Miscellaneous
*Not related to OOP but interesting resources.*

* [Awesome PHP](https://github.com/ziadoz/awesome-php) - A curated list of amazingly awesome PHP libraries, resources and shiny things.
* [PHP The Right Way](http://www.phptherightway.com/) - A complete guide about the best practices and tutorials in PHP.
* [PHP Lecture Slides](http://edu.williamdurand.fr/php-slides/#slide1) - A complete and concise slide about PHP fundamentals, OOP, REST, Composer, MVC, Design Patterns, ORM, Security, OOD and testing in PHP.
* [Functional Programming in PHP](https://code.tutsplus.com/tutorials/functional-programming-in-php--net-35043) - An introduction to functional programming in PHP.
* [Functional Programming and PHP](http://www.sitepoint.com/functional-programming-and-php/) - Another introduction to functional programming and concepts in PHP.
* [What's In A Type](http://blog.ircmaxell.com/2014/10/whats-in-type.html) - A tutorial about types and PHP.
* [Data Structures for PHP Devs: Stacks and Queues](http://www.sitepoint.com/php-data-structures-1/) - A tutorial about Stacks and Queues data structures in PHP.
* [Data Structures for PHP Devs: Trees](http://www.sitepoint.com/data-structures-2/) - A tutorial about Tree data structure in PHP.
* [Data Structures for PHP Devs: Heaps](http://www.sitepoint.com/data-structures-3/) - A tutorial about Heap data structure in PHP.
* [Data Structures for PHP Devs: Graphs](http://www.sitepoint.com/data-structures-4/) - A tutorial about Graph data structure in PHP.
* [PHP Security Pitfalls (&#9658;$)](https://code.tutsplus.com/courses/php-security-pitfalls) - A series about security in PHP.

## Videos
*Videos about object-oriented programming and related concepts.*

* *...more to come...*

## Slides
*Slides about object-oriented programming and related concepts.*

* [The OOP in PHP](http://matthewturland.com/slides/phpoop-tutorial/) - An introductory tutorial to OOP concepts and terminology using PHP's object model as an example.

## Courses
*Courses about object-oriented programming and related concepts.*

* *...more to come...*

## Books
*Fantastic and must-read books about object-oriented programming, analysis, design and related concepts.*

* [PHP Objects, Patterns, and Practices](http://books.google.com/books?id=1JkQAwAAQBAJ&hl=pt-BR&source=gbs_book_other_versions)
* [Head First Design Patterns](http://books.google.com/books/about/Head_First_Design_Patterns.html?id=LjJcCnNf92kC&redir_esc=y)
* [Design Patterns: Elements of Reusable Object-Oriented Software](http://books.google.com/books/about/Design_Patterns.html?id=6oHuKQe3TjQC&redir_esc=y)
* [Head First Object-Oriented Analysis and Design](http://books.google.com/books/about/Head_First_Object_Oriented_Analysis_and.html?id=-QpmamSKl_EC&redir_esc=y)
* [Agile Principles, Patterns, and Practices in C#](http://books.google.com/books/about/Agile_Principles_Patterns_and_Practices.html?id=x4tQAAAAMAAJ&redir_esc=y)
* [Growing Object-Oriented Software, Guided by Tests](http://books.google.com/books/about/Growing_Object_Oriented_Software_Guided.html?id=fOyYCR4oYs0C&redir_esc=y)
* [Test Driven Development: By Example](http://books.google.com/books/about/Test_driven_Development.html?id=gFgnde_vwMAC&redir_esc=y)
* [Clean Code: A Handbook of Agile Software Craftsmanship](http://books.google.com/books/about/Clean_Code.html?id=_i6bDeoCQzsC&redir_esc=y)
* [Refactoring: Improving the Design of Existing Code](http://books.google.com/books/about/Refactoring.html?id=1MsETFPD3I0C&redir_esc=y)
* [UML Distilled: A Brief Guide to the Standard Object Modeling Language](http://books.google.com/books/about/UML_Distilled.html?id=nHZslSr1gJAC&redir_esc=y)
* [Patterns of Enterprise Application Architecture](http://books.google.com/books/about/Patterns_of_Enterprise_Application_Archi.html?id=FyWZt5DdvFkC&redir_esc=y)
* [Domain-Driven Design: Tackling Complexity in the Heart of Software](http://books.google.com/books/about/Domain_driven_Design.html?id=7dlaMs0SECsC&redir_esc=y)
* [The Pragmatic Programmer: From Journeyman to Master](http://books.google.com/books/about/The_Pragmatic_Programmer.html?id=5wBQEp6ruIAC&redir_esc=y)
* [The Passionate Programmer: Creating a Remarkable Career in Software Development](http://books.google.com/books/about/The_Passionate_Programmer.html?id=FvJePgAACAAJ&redir_esc=y)

## People
*Some fantastic and influential PHP and non-PHP developers.*

* [Adam Culp](https://twitter.com/adamculp) - Consultant at Zend Technologies and Sunshine PHP organizer.
* [Alvaro Videla](https://twitter.com/old_sound) - Creator of PHP library for RabbitMQ and co-author of RabbitMQ in Action.
* [Andi Gutmans](https://twitter.com/andigutmans) - CEO and co-founder of Zend and PHP co-architect.
* [Andy Hunt](https://twitter.com/PragmaticAndy) - One of the original authors of Agile Manifesto and co-author of The Pragmatic Programmer book.
* [Anthony Ferrara](https://twitter.com/ircmaxell) - Co-author of PHP Internals book and Developer Advocate for Google.
* [Benjamin Eberlei](https://twitter.com/beberlei) - Project-leader of Doctrine ORM and contributor to the Symfony2 Framework.
* [Bernhard Schussek](https://twitter.com/webmozart) - Member of Symfony2 core development and creator of Puli library.
* [Bruno Skvorc](https://twitter.com/bitfalls) - Web developer and PHP editor in Sitepoint.
* [Cal Evans](https://twitter.com/CalEvans) - PHP developer and open source contributor.
* [Chad Fowler](https://twitter.com/chadfowler) - Developer, speaker and author of The Passionate Programmer book.
* [Christophe Coevoet](https://twitter.com/Stof70) - Member of Symfony2 core development and open source contributor to projects like Doctrine ORM.
* [David Zuelke](https://twitter.com/dzuelke) - PHP developer at Heroku and regular speaker.
* [Dayle Rees](https://twitter.com/daylerees) - Laravel evangelist and author of Laravel Code Bright and Code Happy books.
* [Derick Rethans](https://twitter.com/derickr) - Author of Xdebug and PHP engineer/evangelist on MongoDB.
* [Erika Heidi](https://twitter.com/erikaheidi) - Author of Vagrant Cookbook and Phansible project and developer evangelist at Digital Ocean.
* [Fabien Potencier](https://twitter.com/fabpot) - CEO and co-founder of SensioLabs and founder and project lead of Symfony Framework.
* [Guilherme Blanco](https://twitter.com/guilhermeblanco) - PHP developer and open source contributor to projects like Doctrine ORM and Zend and Symfony frameworks.
* [Hugo Hamon](https://twitter.com/hhamon) - PHP developer and head of training in SensioLabs.
* [Igor Wiedler](https://twitter.com/igorwhiletrue) - Creator of Silex micro-framework and open-source contributor to projects like Symfony and Composer.
* [Javier Eguiluz](https://twitter.com/javiereguiluz) - Symfony evangelist in SensioLab and creator of easybook project.
* [Jeffrey Way](https://twitter.com/jeffrey_way) - Creator of Laracasts and Laravel contributor and evangelist.
* [Jeremy Mikola](https://twitter.com/jmikola) - Engineer at MongoDB, open source contributor to projects like Doctrine ODM and Symfony Framework, and co-organizer of WurstCon.
* [Johannes Schmitt](https://twitter.com/schmittjoh) - Founder of Scrutinizer CI and open source contributor to projects like Symfony.
* [Jordi Boggiano](https://twitter.com/seldaek) - Founder of Toran Proxy, co-creator and project lead of Composer and Monolog and Symfony core developer.
* [Josh Lockhart](https://twitter.com/codeguy) - Creator of Slim Framework and PHP The Right Way site.
* [Julien Pauli](https://twitter.com/julienPauli) - Co-author of PHP Internals book and open source contributor.
* [Kent Beck](https://twitter.com/KentBeck) - One of the original authors of Agile Manifesto and creator of Exteme Programming and Test Driven Development.
* [Konstantin Kudryashov](https://twitter.com/everzet) - Creator of Behat and PhpSpec test frameworks.
* [Kris Wallsmith](https://twitter.com/kriswallsmith) - PHP developer and creator of Assetic framework and Buzz library.
* [Larry Garfield](https://twitter.com/Crell) - PHP developer and core contributor of Drupal.
* [Lukas Kahwe Smith](https://twitter.com/lsmith) - PHP developer and open source contributor to projects like Doctrine ORM and Symfony Framework.
* [Marcello Duarte](https://twitter.com/_md) - PHP developer and co-creator of PhpSpec test framework.
* [Martin Fowler](https://twitter.com/martinfowler) - One of the original authors of Agile Manifesto and author of the best selling books about software engineering like Patterns of Enterprise Application Architecture and Refactoring books.
* [Matthew Weier O'Phinney](https://twitter.com/mwop) - Principal Enginner at Zend Technologies and project lead for Zend Framework and Apigility.
* [Matthias Noback](https://twitter.com/matthiasnoback) - PHP developer and author of books like A Year with Symfony and Principles of Package Design.
* [Marco Pivetta](https://twitter.com/Ocramius) - PHP developer and core team member of Doctrine ORM and team member of Zend Framework.
* [Michael Dowling](https://twitter.com/mtdowling) - Software enginner at Amazon Web Services and creator of Guzzle library.
* [Mike van Riel](https://twitter.com/mvriel/) - PHP developer and lead developer of phpDocumentor and Cilex projects.
* [Nikita Popov](https://twitter.com/nikita_ppv) - Co-author of PHP Internals book, open source contributor and creator of PHP Parser library.
* [Nils Adermann](https://twitter.com/naderman) - PHP developer and co-creator of Composer.
* [Pablo Godel](https://twitter.com/pgodel) - PHP developer, open source contributor and co-organizer of Sunshine PHP.
* [Paul Jones](https://twitter.com/pmjones) - PHP developer, creator of Aura PHP, open source contributor and author of Modernizing Legacy Applications in PHP.
* [Phil Sturgeon](https://twitter.com/philsturgeon) - Founder of PyroCMS, open source contributor and author of Build APIs You Won't Hate book.
* [Philip Brown](https://twitter.com/philipbrown) - PHP developer and writer in Culttt website.
* [Pádraic Brady](https://twitter.com/padraicb/) - Creator of Mockery library and open source contributor to projects like Zend Framework.
* [Rafael Dohms](https://twitter.com/rdohms) - PHP developer and evangelist, open source contributor and organizer of Amsterdam PHP.
* [Rasmus Lerdorf](https://twitter.com/rasmus) - Creator of PHP and open source contributor.
* [Rob Allen](https://twitter.com/akrabat) - PHP developer, Zend Framework contributor and co-author of Zend Framework in Action book.
* [Robert C. Martin](https://twitter.com/unclebobmartin) - One of the original authors of Agile Manifesto and author of the best selling books about software engineering like Clean Code and Agile Principles, Patterns, and Practices in C# books.
* [Ryan Weaver](https://twitter.com/weaverryan) - PHP developer, trainer and consultant at KnpLabs and member of Symfony core team.
* [Sara Golemon](https://twitter.com/SaraMG) - Open source contributor to projects like PHP runtime and HHVM and author of Extending and Embedding PHP book.
* [Sebastian Bergmann](https://twitter.com/s_bergmann) - PHP developer, open source contributor and creator of PHPUnit test framework.
* [Taylor Otwell](https://twitter.com/taylorotwell) - PHP developer and creator of Laravel Framework.
* [Ward Cunningham](https://twitter.com/WardCunningham) - Programmer pioneer in Design Patterns and Extreme Programming.
* [William Durand](https://twitter.com/couac) - PHP developer, open source contributor and creator of Geocoder library.
* [Zeev Suraski](https://twitter.com/zeevs) - CTO and co-founder of Zend and PHP co-architect.

## Some Questions

***I found not related to PHP resources. Is this correct?***  
The project name is "Learning OOP in PHP". But, despite the name, object oriented programming is a concept related to a lot of other languages like C++, Java, C#, Python, Ruby and so on. That said, exists a lot of fantastic resources like videos and tutorials about object-oriented programming made in another programming languages and I considered reasonable include them here in this reference.

***There are some tutorials that aren't in the correct section?***  
I tried to keep this reference as simple as possible and divided it in a few areas. But there are some problems! Feel free to make any suggestions and contribute.
