Финальный (final) класс или метод используется для того, чтобы предоставить разра-
ботчику возможность управлять наследованием. Классы или методы, объявленные
как финальные, не могут быть расширены и/или перегружены классами-
наследниками. Чтобы запретить перегрузку определенного класса или метода, в опреде-
лении класса или метода должно стоять ключевое слово final, как показано в листинге
13.20.
Листинг 1. Объявление финальных классов или методов
<?php
final class NoExtending {
public function myFunction() {
/* Логика функции */
}
}
class restrictedExtending {
final public function anotherFunc() {
/* Логика функции */
}
}
class myChild extends restrictedExtending {
public function thirdFunction() {
/* Логика функции */
}
}
?>
В листинге 1 определяются три разных класса. Первый из них, класс
NoExtending, никогда не будет родительским классом для класса-наследника, потому что
сам по себе весь класс был объявлен как final. С другой стороны, хотя класс
restrictedExtending может быть расширен, метод anotherFunc(), находящийся в нем,
никогда не будет перегружен классом-наследником. Как можно видеть, ключевое слово
final полезно использовать для того, чтобы обеспечить возможность выполнения дей-
ствий определенным способом в структурах объектов, не запрещая пользователям реали-
зовывать свои собственные подклассы.