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
"BaseClass::test() llamada\n";
}

// Como la clase es final, la palabra clave final para el método, es redundante
final public function moreTesting() {
echo
"BaseClass::moreTesting() llamada\n";
}
}

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

Ejemplo #3 Ejemplo de propiedad Final desde PHP 8.4.0

<?php
class BaseClass {
final protected
string $test;
}

class
ChildClass extends BaseClass {
public
string $test;
}
// Devuelve un error Fatal: Cannot override final property BaseClass::$test
?>

Ejemplo #4 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: Desde PHP 8.0.0, los métodos privados no pueden declararse como finales, excepto el constructor.

Nota: Una propiedad que se declara private(set) es implícitamente final.