En PHP 5, una clase puede ser declarada como final, para prevenir
que sea extendida:
<?php
// en una libreria general
final class NotasLiterales {
/* ... */
function obtenerNota($alumno) {
return 'F';
}
}
/* ------------ */
// un *lamer* sin acceso a la libreria quiere
// modificar el comportamiento de la clase
class MisNotasMostras extends NotasLiterales {
function obtenerNota($alumno) {
return 'A';
}
}
// pero todo lo que obtiene es un error
?>
al ejecutar se produce el error
Fatal error: Class MisNotasMostras may not inherit from final class (NotasLiterales) in micrackeo.php on line 20
Y para mayor control aún, los métodos pueden ser declarados finales, para
que no puedan ser redefinidos en una sub-clase.
<?php
class PaletaDeColores {
/* ... */
final function nombreDelColor($r, $g, $b) { /* ... */ }
}
class Daltonico extends PaletaDeColores {
// esta redefinicion causa un error
function nombreDelColor($r, $g, $b) {
return 'gris';
}
}
?>
Fatal error: Cannot override final method PaletaDeColores::nombreDelColor() in daltol33t.php on line 14