Атрибут Override

(PHP 8 >= 8.3.0)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Атрибут ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² интСрфСйсС.

PHP выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, Ссли Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠΌ интСрфСйсС Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ.

Атрибут нСльзя Π½Π°Ρ†Π΅Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ __construct(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP Π½Π΅ провСряСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ сигнатур конструкторов ΠΏΡ€ΠΈ наслСдовании.

ΠžΠ±Π·ΠΎΡ€ класса

#[\Attribute]
final class Override {
/* ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ */
public function __construct()
}

Бписок измСнСний

ВСрсия ОписаниС
8.5.0 Атрибут Override Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со свойствам.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 НацСливаниС Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

<?php

class Base
{
protected function
foo(): void {}
}

final class
Extended extends Base
{
#[
\Override]
protected function
boo(): void {}
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² PHP 8.3 Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½:

Fatal error: Extended::boo() has #[\Override] attribute, but no matching parent method exists

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 НацСливаниС Π½Π° свойства

<?php

class Base
{
protected
string $foo;
}

final class
Extended extends Base
{
#[
\Override]
protected
string $boo;
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² PHP 8.5 Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½:

Fatal error: Extended::$boo has #[\Override] attribute, but no matching parent property exists

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

  • Override::__construct β€” Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Override
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы