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::classsau__CLASS__într-o metodă moștenită și primești mereu numele clasei părinte. Foloseștestatic::classsauget_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).