Переход к PHP5 - Финальные классы и методы (final)

ОГЛАВЛЕНИЕ

Финальные классы и методы (final)

Финальный метод невозможно переопределить в классе-наследнике. Финальный класс невозможно использовать для создания классов-наследников. Это может пригодиться, когда необходимо сохранить алгоритм, инкапсулированный в классе, неизменным. Например, что бы ограничить программиста, использующего библиотеку, от переопределения поведения. Использование финальных классов вместе с типизацией параметров функций создает практически 100% препятствие на пути расширения или подмены функциональности. Естественно, при открытом исходном коде убрать final у класса или метода не является трудной задачей, но, например, final часто используется у классов, определенных в самом PHP или его расширениях (Exception class, DOM extention).

Пример финального класса и финального метода:

final class Security {
function
createUser() {
...
}
}

class
View {
final static function
createView(Security $user) {
...
}
}

Поскольку класс Security является финальным, а параметром функции View::createView может быть только объект финального класса или null, это дает 100% гарантию, что в если в функцию createView будет передан объект, то это будет только объект класса Security, а не подмененный.