Ce face #[\Override]
Când suprascrii o metodă din clasa părinte, o greșeală de scriere în nume (salute în loc de salut) creează în tăcere o metodă nouă, iar cea din părinte rămâne activă. Cu #[\Override], PHP verifică la încărcarea clasei că există o metodă cu același nume în părinte sau într-o interfață și dă eroare fatală dacă nu există.
Atributul ajută și la refactorizare: dacă cineva redenumește sau șterge metoda din clasa părinte, clasele copil marcate cu #[\Override] nu mai pornesc, așa că problema se vede imediat.
Din PHP 8.5, atributul se poate pune și pe proprietăți, cu aceeași verificare.
Ce returnează
Nimic: este un atribut verificat la compilarea clasei.
Exemple
Exemplul 1: Suprascriere corectă
<?php
class Notificare
{
public function canal(): string
{
return "email";
}
}
class NotificareSms extends Notificare
{
#[\Override]
public function canal(): string
{
return "sms";
}
}
echo new NotificareSms()->canal();
Rezultat
sms
Exemplul 2: Greșeală de scriere prinsă de PHP
<?php
class Notificare
{
public function canal(): string { return "email"; }
}
class NotificareSms extends Notificare
{
#[\Override]
public function canall(): string { return "sms"; }
}
Eroare afișată de PHP (codul nu rulează)
PHP Fatal error: NotificareSms::canall() has #[\Override] attribute, but no matching parent method exists in exemplu.php on line 10
Exemplul 3: Pe proprietăți (PHP 8.5)
<?php
class Produs
{
public string $moneda = "EUR";
}
class ProdusRo extends Produs
{
#[\Override]
public string $moneda = "RON";
}
echo new ProdusRo()->moneda;
Rezultat
RON
Greșeli frecvente
- Pui
#[\Override]pe o metodă privată din părinte: metodeleprivatenu se moștenesc, deci PHP spune că nu există metodă potrivită. - Uiți bara inversă într-un fișier cu
namespace:#[Override]devineApp\Overrideși nu se verifică nimic.
Comenzi înrudite
#[\Deprecated]: Atribut care marchează o funcție, metodă sau constantă ca învechită: fiecare folosire emite un mesaj E_USER_DEPRECATED.abstract: O clasă abstractă nu poate fi instanțiată direct. Servește drept bază pentru alte clase și poate cere metode obligatorii.interface / implements: O interfață este o listă de metode pe care o clasă promite să le aibă. Clasa le scrie cu implements.