#[\Override] în PHP

Clase și obiecte PHP 8.3+ (pe proprietăți: PHP 8.5+) Q&A / Distribuie cod

Atribut care cere ca metoda (sau proprietatea) să suprascrie una din clasa părinte sau din interfață; altfel PHP dă eroare.

Sintaxă
#[\Override]
public function metoda() { ... }

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: metodele private nu se moștenesc, deci PHP spune că nu există metodă potrivită.
  • Uiți bara inversă într-un fișier cu namespace: #[Override] devine App\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.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: #[\Override]

Ai o nelămurire despre utilizarea comenzii #[\Override] sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.