get_called_class
funkcja
Zwraca nazwę klasy użytej w wywołaniu statycznym (late static binding). Wewnątrz metody klasy odpowiada wyrażeniu `static::class`.
get_called_class(): string
get_called_class zwraca nazwę klasy, na której faktycznie wywołano metodę statyczną — nie klasy, w której metoda jest zdefiniowana. To mechanizm late static binding (LSB): PHP rozstrzyga klasę w czasie wykonania, nie kompilacji. Dzięki temu metoda fabryczna zdefiniowana w klasie bazowej może tworzyć obiekty podklasy wywołującej. W PHP 8 preferuj wyrażenie static::class — jest szybsze i może być użyte w kontekstach wymagających stałej (np. atrybuty). get_called_class() wywołana poza metodą klasy rzuca Error: get_called_class() must be called from within a class.
<?php
declare(strict_types=1);
class Model
{
public static function tabela(): string
{
// Zwraca nazwę klasy, na której wywołano metodę
return get_called_class();
// Nowocześniejszy ekwiwalent:
// return static::class;
}
public static function znajdz(int $id): static
{
$klasa = static::class;
echo "Szukam {$klasa} o id={$id}\n";
return new static();
}
}
class Uzytkownik extends Model {}
class Produkt extends Model {}
var_dump(Model::tabela()); // string(5) "Model"
var_dump(Uzytkownik::tabela()); // string(10) "Uzytkownik"
var_dump(Produkt::tabela()); // string(7) "Produkt"
Uzytkownik::znajdz(1); // Szukam Uzytkownik o id=1