В PHP предлагается добавить специальный атрибут
#[Override], с помощью которого можно будет явно помечать методы, которые переопределяют методы из родительского класса. Например:class Parent {
protected function run(): void {}
}
class Child extends Parent {
#[\Override]
public function run(): void {}
}
Если в классе Parent убрать метод run(), то будет брошено исключение. Появление этого атрибута не ломает обратную совместимость, так как его использование опционально и, если его убрать, то метод будет также как и сейчас переопределяться.
Всё идёт к тому, что RFC будет принят (на текущий момент 20 голосов за и 0 против) и мы увидим
#[Override] в PHP 8.3.Несмотря на то, что применение атрибута для переопределяющих методов опционально, мне кажется, что использовать его нужно всегда и, скорей всего, IDE и статические анализаторы будут предлагать это сделать.
При изучении и разработке кода
#[Override] позволит сразу понимать, что этот метод переопределяет родительский, и сократит время на выявление ошибок.Возможно, стоит в будущем (PHP 9 или 10 😎) вообще сделать добавление атрибута
#[Override] для переопределяющих методов обязательным. Отсутствие атрибута в этом случае будет гарантировать, что метод ничего не переопределяет.Но у этой идеи есть и противники. Интересные обсуждения развернулись на reddit и externals.io 👀