Как расширить интерфейс в PHP и сохранить обратную совместимость?

0

У нас есть код устаревшего интерфейса, который я хочу расширить, не нарушая другие классы, которые его реализуют. Мне нужно добавить дополнительный параметр к одному из методов интерфейса, поэтому новые классы, которые будут реализовывать интерфейс, будут использоваться, а старый будет игнорировать его. AFAIK, нет способа изменить интерфейс без изменения сигнатуры метода реализации.

Текущая реализация:

interface inter
{
    public function hey($rr);
}

class Cl implements inter
{
    function hey($rr) {
        echo "hey";
    }
}

Мне хотелось бы что-то вроде этого:

interface inter
{
    public function hey($rr, $ee = true);
}

class Cl implements inter
{
    function hey($rr) {
        echo "hey";
    }
}

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

Спасибо, Алон

Теги:
design-patterns
interface

1 ответ

0

Я не думаю, что для этого существует какое-либо решение. Я бы предложил добавить другой метод с другим именем, например

interface inter
{
    public function hey($rr);
    public function yey($rr, $ee = true);  
}

Или еще лучше расширяет интерфейс с другим интерфейсом, который будет работать для новых классов.

interface other_inter extends inter
{
    public function yey($rr, $ee = true);  
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню