Final-Schlüsselwort
Das Schlüsselwort final hält Kindklassen davon ab, Methoden oder Konstanten zu überschreiben, indem man der Definition final voranstellt. Wenn die Klasse selbst als final definiert wird, kann sie nicht erweitert werden.
Beispiel #1 Beispiel für final-Methoden
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() aufgerufen\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() aufgerufen\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() aufgerufen\n";
}
}
// Erzeugt einen fatalen Fehler: Cannot override final method BaseClass::moreTesting()
?>
Beispiel #2 Beispiel für finale Klassen
<?php
final class BaseClass {
public function test() {
echo "BaseClass::test() aufgerufen\n";
}
// Da die Klasse bereits final ist, ist das Schlüsselwort final redundant
final public function moreTesting() {
echo "BaseClass::moreTesting() aufgerufen\n";
}
}
class ChildClass extends BaseClass {
}
// Erzeugt einen fatalen Fehler: Class ChildClass may not inherit from final class (BaseClass)
?>
Beispiel #3 Beispiel für finale Konstanten (seit 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
?>
Hinweis: Eigenschaften können nicht als final deklariert werden; nur Klassen, Methoden und Konstanten können als final deklariert werden. Seit PHP 8.0.0 dürfen private Methoden nur noch im Konstruktor als final deklariert werden.