Palabra clave Final

PHP introduce la palabra clave final, que impide que las clases hijas sobrescriban un método, antecediendo su definición con final. Si la propia clase se define como final, entonces no se podrá heredar de ella.

Ejemplo #1 Ejemplo de métodos Final

<?php
class BaseClass {
public function
test() {
echo
"llamada a BaseClass::test()\n";
}

final public function
moreTesting() {
echo
"llamada a BaseClass::moreTesting()\n";
}
}

class
ChildClass extends BaseClass {
public function
moreTesting() {
echo
"llamada a ChildClass::moreTesting()\n";
}
}
// Devuelve un error Fatal: Cannot override final method BaseClass::moreTesting()
?>

Ejemplo #2 Ejemplo de clase Final

<?php
final class BaseClass {
public function
test() {
echo
"llamada a BaseClass::test()\n";
}

// Aquí no importa si definimos una función como final o no
final public function moreTesting() {
echo
"llamada a BaseClass::moreTesting()\n";
}
}

class
ChildClass extends BaseClass {
}
// Devuelve un error Fatal: Class ChildClass may not inherit from final class (BaseClass)
?>

Ejemplo #3 Ejemplo de constantes finales a partir de PHP 8.1.0

<?php
class Foo
{
final public const
X = "foo";
}

class
Bar extends Foo
{
public const
X = "bar";
}

// Fatal error: Bar::X cannot override final constant Foo::X
?>

Nota: Las propiedades no pueden declararse como finales: sólo las clases, métodos y constantes (a partir de PHP 8.1.0) pueden declararse como finales. A partir de PHP 8.0.0, los métodos privados no pueden ser declarados finales excepto el constructor.

To Top