Возможно ли в 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? не дает ответа)
Да, это возможно.
Если подкласс не реализует все абстрактные методы абстрактного суперкласса, он также должен быть абстрактным.
Да, возможно, ваш код не будет работать, если вы $VeryConcreteObject->b()
Вот более подробное объяснение.
Он будет работать, даже если вы оставите абстрактную функцию 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(); } }