get_called_class în PHP

Returnează numele clasei pe care a fost apelată metoda statică curentă, ținând cont de moștenire.

Sintaxă
get_called_class(): string

Ce face get_called_class

Într-o metodă statică moștenită, get_called_class() dă numele clasei folosite la apel (Copil::metoda()), nu al clasei în care este scrisă metoda. Mecanismul se numește late static binding.

Rezultatul este același cu static::class, scrierea preferată astăzi. self::class și __CLASS__ dau, în schimb, clasa în care este scris codul.

Ce returnează

Numele clasei, ca text. Apelată în afara unei clase, aruncă Error.

Exemple

Exemplul 1: Clasa apelată, nu clasa în care e scris codul

<?php
class Model
{
    public static function tabel(): string
    {
        return "tabelul " . strtolower(get_called_class());
    }

    public static function compara(): string
    {
        return __CLASS__ . " / " . self::class . " / " . static::class;
    }
}

class Produs extends Model {}
class Comanda extends Model {}

echo Produs::tabel() . "\n";
echo Comanda::tabel() . "\n";
echo Produs::compara();

Rezultat

tabelul produs
tabelul comanda
Model / Model / Produs

Greșeli frecvente

  • Folosești self::class sau __CLASS__ într-o metodă moștenită și primești mereu numele clasei părinte. Folosește static::class sau get_called_class().

Comenzi înrudite

  • static / self::: Membrii static aparțin clasei, nu unui obiect anume. Se apelează cu NumeClasa::metoda(), fără new.
  • get_class / get_parent_class: Returnează numele clasei unui obiect (get_class) sau numele clasei părinte (get_parent_class).
  • forward_static_call: Apelează o metodă statică din clasa părinte păstrând clasa curentă pentru static:: (late static binding).