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
📘 Naucz się w lekcji →