forward_static_call în PHP

Apelează o metodă statică din clasa părinte păstrând clasa curentă pentru static:: (late static binding).

Sintaxă
forward_static_call(callable $callback, mixed ...$args): mixed

Ce face forward_static_call

Dacă apelezi call_user_func("Parinte::metoda"), în metoda apelată static:: înseamnă clasa Parinte. Cu forward_static_call, informația despre clasa apelantă este „trimisă mai departe”, deci static:: rămâne clasa copil.

Funcția poate fi folosită doar din interiorul unei clase. În cod obișnuit, parent::metoda() face deja acest lucru; forward_static_call este util când metoda este aleasă dinamic.

Parametri

Parametru Descriere
$callback Metoda apelată, de exemplu [Parinte::class, "metoda"].
$args Argumentele.

Ce returnează

Ce returnează metoda apelată.

Exemple

Exemplul 1: Diferența față de call_user_func

<?php
class Model
{
    public static function creeaza(string $nume): string
    {
        return "Creez " . static::class . " $nume";
    }
}

class Produs extends Model
{
    public static function test(): void
    {
        echo call_user_func([Model::class, "creeaza"], "Mouse") . "\n";
        echo forward_static_call([Model::class, "creeaza"], "Mouse") . "\n";
    }
}

Produs::test();

Rezultat

Creez Model Mouse
Creez Produs Mouse

Greșeli frecvente

  • Apelezi forward_static_call în afara unei clase. Primești eroarea Cannot call forward_static_call() when no class scope is active.

Comenzi înrudite

  • forward_static_call_array: Ca forward_static_call, dar argumentele metodei sunt date într-un tablou.
  • call_user_func / call_user_func_array: Apelează o funcție dată printr-o variabilă (nume, closure sau metodă), cu argumentele primite.
  • get_called_class: Returnează numele clasei pe care a fost apelată metoda statică curentă, ținând cont de moștenire.
  • static / self::: Membrii static aparțin clasei, nu unui obiect anume. Se apelează cu NumeClasa::metoda(), fără new.