Наследование интерфейсов

Adelf

Administrator
Команда форума
Хочу, чтобы можно было интерфейсы в PHP друг от друга наследовать. точнее расширять. Чтобы один интерфейс мог много других в себе содержать. Что мешало это сделать?
Не сказать, чтобы это прям останавливает в реализации чего-либо, но было бы крайне удобно. И я не вижу каких-то страшных камней на пути к реализации.. я чего-то не знаю?
 

Adelf

Administrator
Команда форума
Можно конечно на абстрактные классы перейти... В моем случае будет норм. Но все равно не нравится. Мелочь же...
 

Активист

Активист
Команда форума
Еб..., колотить. Интерфейс описывает публичные методы доступа к объекту. Какие наследования еще? Да, который обязательно должны быть реализованы.
 

Adelf

Administrator
Команда форума
интерфейс описывает некий контракт. А контракт может содержать несколько пунктов :)

В дотнетах постоянно такое используется. удобно.
 

Активист

Активист
Команда форума
интерфейс описывает некий контракт. А контракт может содержать несколько пунктов :)
Ни...я подобного.

PHP:
interface ContractorsList
{
public function getContractors();
}

interface RegionsList
{
public function getRegions();
}

class MyAdminDataModel implements ContractorsList, RegionsList {
public function getContractors() {
// new PDO blabla
}

public function getRegions()
{
// new PDO blabla
}
}

class ViewObjectCard {
public function __construct (ContractorsList $contractors, RegionsList $regions) {
// Смысл прототипа - мне пох, что ты там мне даешь, главное чтобы под интерфейс нужный мне все заточил, программист твою мать!
}
}
 
Последнее редактирование:

Adelf

Administrator
Команда форума
Вот я.... поверил гуглу и всяким там stackoverflow...thx
 

Adelf

Administrator
Команда форума
@Активист, не ругайся. нужно бывает такое :)
Хотя навело на мысль, что я тут нарушаю Single Responsibility принцип... по крайне мере на грани.
 

Активист

Активист
Команда форума
@Активист, не ругайся. нужно бывает такое :)
Хотя навело на мысль, что я тут нарушаю Single Responsibility принцип... по крайне мере на грани.
Ну на...я?

Дойдет до того:

Код:
<?php
interface a
{
    public function x($a);
}

interface b
{
    public function x($a, $b);
}

interface c extends a,b
{
 
}

class foo implements c
{
 
}
Что вызовет фатал (Declaration of a::x() must be compatible with b::x($a, $b)) и взрыв мозга просто того, кто потом классы под интерфейсы писать будет.
Проблема заключется в том, что вы добавите какой-нибудь метод к интерфейсв b, а интерфейс c, который в одном участке кода по идиотскому желанию программитста вдруг унаследовал этот a, так еще и методы одинаково назвал в c. А это, например, код по работе с баблом на 1000 транзакций в день. А тесты мы не запускаем или не пишем ;) Необходимо будет еще и зависимости наследования интерфейсов и их реализацию тянуть.

- Как вы тестируете код?
- В продакшине !

Вот простое описание того, как надо применять интерфейсы:
http://php.net/manual/ru/class.arrayobject.php

Что сложного написать так (просто перечислив?)
ArrayObject implements IteratorAggregate , ArrayAccess , Serializable , Countable
Зачем, зачем их наследовать??!
 

AnrDaemon

Продвинутый новичок
Не один, а "каждого типа по одному".
Есть интерфейс "рот", есть интерфейс "жопа".
И если [отводить отходы] через рот ещё как-то получается (хотя, опять же, это нарушения контракта и вызывает кучу эксепшенов в процессе использования), то есть жопой - это уже оскорбление.
 

MiksIr

miksir@home:~$
Есть и срать - разные обязанности. Если вы навестили все это на один объект - то ваш код пахнет так же, как и ваши аналогии. Вообще, в 99% когда начинаются аналогии - уже пахнет.
 

fixxxer

К.О.
Партнер клуба
Почему? Если у меня модель существа, которое ест жопой - все нормально. Ну это, правда, про class implements X,Y.

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

AnrDaemon

Продвинутый новичок
Есть и срать - разные обязанности. Если вы навестили все это на один объект - то ваш код пахнет так же, как и ваши аналогии. Вообще, в 99% когда начинаются аналогии - уже пахнет.
Ну вот возьмём тебя… Ты у нас как - объект?
 

MiksIr

miksir@home:~$
Ну вот возьмём тебя… Ты у нас как - объект?
Нет, я ПО + среда исполнения.

Почему? Если у меня модель существа, которое ест жопой - все нормально. Ну это, правда, про class implements X,Y.

С интерфейсами - в случае, когда один контракт естественным образом является расширением другого, и дополнительные методы бессмысленны без основных. Редкий случай, но бывает.
Ваще это так, шутка была. На тему понятия слова интерфейс.
 

AnrDaemon

Продвинутый новичок
Как говорится, в каждой шутке есть доля шутки. А остальное - суровая правда жизни.
Тебе привели конкретный, живой пример объекта, реализующего оба интерфейса. С частично пересекающимся функционалом.
Размахивать руками в попытке взлететь, отмахиваясь от неудобных примеров, не надо, надо внятно и аргументированно отстоять свою позицию. Или указать на изъяны в позиции оппонента, если свою позицию сохранить уже не удаётся.
 
Последнее редактирование:

MiksIr

miksir@home:~$
Луна это как сыр. Круглая и с дырками. Начинай отстаивать свою позицию.
 
Сверху