Ключевое слово final

Ключевое слово final указывают в начале объявлений. Окончательные методы, свойства и константы невозможно переопределить в дочернем классе, а окончательный класс становится недоступным для расширения.

Пример #1 Пример окончательных методов

<?php

class BaseClass
{
   public function test()
   {
       echo "Вызван метод BaseClass::test()\n";
   }

   final public function moreTesting()
   {
       echo "Вызван метод BaseClass::moreTesting()\n";
   }
}

class ChildClass extends BaseClass
{
   public function moreTesting()
   {
       echo "Вызван метод ChildClass::moreTesting()\n";
   }
}
// Переопределение финального метода вызовет ошибку Fatal error: Cannot override final method BaseClass::moreTesting()

Пример #2 Пример окончательного класса

<?php

final class BaseClass
{
    public function test()
    {
        echo "Вызвали метод BaseClass::test()\n";
    }

    // Поскольку класс уже окончательный, ключевое слово final избыточно
    final public function moreTesting()
    {
        echo "Вызвали метод BaseClass::moreTesting()\n";
    }
}

class ChildClass extends BaseClass {}
// Наследование финального класса вызовет ошибку Fatal error: Class ChildClass may not inherit from final class (BaseClass)

Пример #3 Пример финального свойства, которые появились с PHP 8.4.0

<?php

class BaseClass
{
   final protected string $test;
}

class ChildClass extends BaseClass
{
    public string $test;
}

// Переопределение финального свойства вызовет ошибку Fatal error: Cannot override final property BaseClass::$test

Пример #4 Пример финальной константы, которые появились с 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

Замечание: С PHP 8.0.0 закрытые методы, за исключением конструкторов , нельзя объявлять финальными.

Замечание: Свойства, которые объявили c закрытой видимостью области установки значения private(set), неявно получают ключевое слово final.