Final Keyword

The final keyword prevents child classes from overriding a method or constant by prefixing the definition with final. If the class itself is being defined final then it cannot be extended.

Example #1 Final methods example

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

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

class
ChildClass extends BaseClass {
public function
moreTesting() {
echo
"ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Example #2 Final class example

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

// As the class is already final, the final keyword is redundant
final public function moreTesting() {
echo
"BaseClass::moreTesting() called\n";
}
}

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

Example #3 Final constants example as of 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
?>

Note: Properties cannot be declared final: only classes, methods, and constants (as of PHP 8.1.0) may be declared as final. As of PHP 8.0.0, private methods may not be declared final except for the constructor.

To Top