Подтвердить что ты не робот

Php абстрактный класс, расширяющий другой абстрактный класс

Возможно ли в PHP, что абстрактный класс наследуется от абстрактного класса?

Например,

abstract class Generic {
    abstract public function a();
    abstract public function b();
}

abstract class MoreConcrete extends Generic {
    public function a() { do_stuff(); }
    abstract public function b(); // I want this not to be implemented here...
}

class VeryConcrete extends MoreConcrete {
    public function b() { do_stuff(); }

}

(абстрактный класс расширяет абстрактный класс в php? не дает ответа)

4b9b3361

Ответ 1

Да, это возможно.

Если подкласс не реализует все абстрактные методы абстрактного суперкласса, он также должен быть абстрактным.

Ответ 2

Да, возможно, что ваш код не будет работать, если вы вызвали $VeryConcreteObject->b()

Здесь более подробное объяснение.

Ответ 3

Он будет работать, даже если вы оставите абстрактную функцию b(); в классе MoreConcrete.

Но в этом конкретном примере я бы преобразовал класс "Generic" в интерфейс, поскольку он не имеет больше реализации рядом с определениями методов.

interface Generic {
    public function a(); 
    public function b();
}

abstract class MoreConcrete implements Generic {
    public function a() { do_stuff(); }
    // can be left out, as the class is defined abstract
    // abstract public function b();
}

class VeryConcrete extends MoreConcrete {
    // this class has to implement the method b() as it is not abstract.
    public function b() { do_stuff(); }
}