PHP 5 предоставляет ключевое слово final, разместив которое перед объявлениями методов класса, можно предотвратить их переопределение в дочерних классах. Если же сам класс определяется с этим ключевым словом, то он не сможет быть унаследован.
Пример #1 Пример окончательных (final) методов
<?php
class BaseClass {
public function test() {
echo "Вызван метод BaseClass::test()\n";
}
final public function moreTesting() {
echo "Вызван метод BaseClass::moreTesting()\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "Вызван метод ChildClass::moreTesting()\n";
}
}
// Выполнение заканчивается фатальной ошибкой: Cannot override final method BaseClass::moreTesting()
// (Метод BaseClass::moretesting() не может быть переопределён)
?>
Пример #2 Пример окончательного (final) класса
<?php
final class BaseClass {
public function test() {
echo "Вызван метод BaseClass::test()\n";
}
// В данном случае неважно, укажете ли вы этот метод как final или нет
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
}
// Выполнение заканчивается фатальной ошибкой: Class ChildClass may not inherit from final class (BaseClass)
// (Класс ChildClass не может быть унаследован от окончательного класса (BaseClass))
?>
Замечание: Свойства и константы не могут быть объявлены финальными, только классы и методы.