The final modifier can be added to class constants. Doing so prevents overriding of a constant:
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
Besides, interface constants would become overridable by default, and the final
modifier could be used to retain the original behavior.
interface I
{
public const X = "i";
final public const Y = "i";
}
class C implements I
{
public const X = "c"; // Overriding I::X is possible
public const Y = "c"; // Overriding I::Y is not possible
}
// Fatal error: C::Y cannot override final constant I::Y
More about PHP 8.1
Read about all PHP 8.1 features and changes in here.