これも地味にありがたい系の追加仕様。
constにfinal宣言ができるようになり、継承先のクラスでオーバーライドできないようになった。
むりやり下記のようにoverrideするとFatal errorがでるようになった。
<?php
class Base
{
final public const URL = "https://www.google.com/";
}
class Child extends Base
{
public const URL = "https://www.google.co.jp/"; // Fatal error
}
このエラーは下記のように-l オプションでlinterにかけるだけでも検出できるのもありがたい。
$ php -l final_const.php
Fatal error: Child::URL cannot override final constant Base::URL in final_const.php on line 8
Errors parsing final_const.php
なおプロパティはfinal宣言できない模様。
参考: https://www.php.net/manual/en/language.oop5.final.php#language.oop5.final.example.php81