Ответ 1
Да, это возможно.
Если подкласс не реализует все абстрактные методы абстрактного суперкласса, он также должен быть абстрактным.
Возможно ли в 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(); }
}