OOP design patterns in PHP