через интерфейсы: `function setFoo(FooInterface $instance)`, интерфейс описывает методы, абстрактные классы - базовую реализацию этих методов, для примера реализация шаблона адаптер на примере БД: интерфейс адаптера СУБД, абстрактный адаптер для mysql реализующий интерфейс, класс расширяющий абстрактный адаптер mysql на основе php расширения mysql + класс расширяющий абстрактный адаптер mysql на основе php расширения mysqli