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 eroareaCannot 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.