oop — Когда уместно использовать черту в PHP?

Я читал о чертах PHP. Конкретно я сталкивался этот статья. Они рассматривают пример, включающий объекты, которые должны реализовать совместно используемый интерфейс. Следующий аргумент представлен:

Имеет ли смысл дублировать метод share () в каждом классе, который реализует интерфейс Shareable?

Нет.

Имеет ли смысл иметь класс AbstractShare, который расширяют объекты, реализующие интерфейс Shareable?

Нет.

Имеет ли смысл реализовывать метод share () как часть класса AbstractEntity, но затем блокировать его для объекта Message?

Нет.

Имеет ли смысл реализовывать ShareableTrait, которое выполняет интерфейсный контракт и поэтому может быть легко добавлено только к объектам, которые в нем нуждаются?

Да!

Я могу понять первый и третий пункты. Но второй сбивает меня с толку. Что именно не так с наличием абстрактного класса AbstractShareable или что-то подобное, что содержит функциональность, чтобы поделиться чем-то, а затем расширять его?

3

Решение

Интерфейс специально разработан для создания надежных интерфейсов, не зависящих от класса реализации. Имея в виду:

function (Shareable $sharable) {
$shareable->share();
}

Вы можете быть уверены, что этот код будет работать всегда (любой объект, переданный в share() метод), из-за объявления вашего интерфейса.

Вы можете достичь того же, используя иерархию классов; То есть, если вам требуется определенный класс, вы можете быть уверены, что все его дочерние элементы также будут иметь те же методы, что и родительский. Но: это накладывает строгую иерархию классов на ваши классы. Все классы должны расширять один конкретный базовый класс. И они могут только расширить этот конкретный класс. Вы не можете использовать иерархию классов для обоих AbstractSharable и AbstractLoggable, сказать. Вот почему решение иерархии классов слишком негибко. Это позволит вам реализовать только одну «черту». Или вам придется смешать все ваши различные «черты» вместе в одном базовом классе. Тогда у вас есть гигантский монолитный базовый класс.

Разделение характеристик на небольшие индивидуальные интерфейсы делает ваш код простым и гибким. Черты обеспечивают гибкую реализацию, аналогичную спецификации интерфейса.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]