Closure::getCurrent în PHP

Returnează închiderea (funcția anonimă) care rulează acum, ca o funcție anonimă să se poată apela recursiv.

Sintaxă
Closure::getCurrent(): Closure

Ce face Closure::getCurrent

O funcție anonimă nu are nume, deci nu se poate apela pe ea însăși direct. Înainte de PHP 8.5, soluția era use (&$f): funcția prindea prin referință variabila în care era pusă.

Closure::getCurrent(), apelată în interiorul unei funcții anonime, returnează chiar acea funcție. Așa scrii recursivitate fără referințe și fără să depinzi de numele variabilei.

Apelată în afara unei închideri, metoda aruncă Error.

Ce returnează

Obiectul Closure care se execută în acel moment.

Exemple

Exemplul 1: Factorial recursiv cu o funcție anonimă

<?php
$factorial = function (int $n): int {
    return $n <= 1 ? 1 : $n * Closure::getCurrent()($n - 1);
};

echo $factorial(5);

Rezultat

120

Exemplul 2: Parcurgerea unui meniu pe mai multe niveluri

<?php
$meniu = [
    "Acasă" => [],
    "Învață" => ["PHP" => ["Tablouri" => []], "SQL" => []],
];

$afiseaza = function (array $elemente, int $nivel = 0): void {
    foreach ($elemente as $nume => $copii) {
        echo str_repeat("  ", $nivel) . "- $nume\n";
        Closure::getCurrent()($copii, $nivel + 1);
    }
};

$afiseaza($meniu);

Rezultat

- Acasă
- Învață
  - PHP
    - Tablouri
  - SQL

Greșeli frecvente

  • Apelezi Closure::getCurrent() într-o funcție cu nume sau la nivelul fișierului și primești Error.
  • Într-o funcție anonimă definită în altă funcție anonimă, getCurrent() returnează funcția interioară (cea care rulează), nu pe cea exterioară.

Comenzi înrudite

  • function () use / fn: O funcție fără nume, salvată într-o variabilă sau dată direct altei funcții. Poate folosi variabile din exterior cu use.
  • function: Definește o funcție proprie: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.
  • call_user_func / call_user_func_array: Apelează o funcție dată printr-o variabilă (nume, closure sau metodă), cu argumentele primite.
  • Operatorul pipe |>: Trimite valoarea din stânga ca argument funcției din dreapta, ca să scrii transformări în lanț de la stânga la dreapta.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Closure::getCurrent

Ai o nelămurire despre utilizarea comenzii Closure::getCurrent sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.