Вопрос проверяет знание ограничений наследования и понимание, зачем иногда запрещают расширение классов.
final class — это класс, от которого нельзя наследоваться. Он полностью закрыт для расширения. Это гарантирует, что поведение класса не будет изменено через наследование. Часто используется для инфраструктурного или критичного кода.
В PHP разработчик может явно запретить наследование класса с помощью ключевого слова final.
finalОпределение:final class — это класс, который нельзя расширить с помощью extends.
final class Config {
public function get(string $key): mixed {
// ...
}
}
Попытка наследования приведёт к ошибке.
Причины использования:
Защита инвариантов класса
Гарантия неизменного поведения
Упрощение поддержки кода
final class vs final methodВажно различать:
final class — нельзя наследоваться вообще
final method — нельзя переопределить конкретный метод
class Base {
final public function run() {}
}
Value Object
DTO
Инфраструктурные классы
Безопасность и ядро системы
final classНельзя расширить поведение через наследование
Сложнее использовать в тестах без интерфейсов
final class стоит использовать, когда класс представляет законченную концепцию и не предназначен для расширения. Для гибкости его часто сочетают с интерфейсами.