Închideri în PHP (funcții anonime)

Închiderile și funcții anonime în PHP - este functiile normale, dar fără un nume. Să ne uităm la un exemplu al acestei funcții:

În acest exemplu, există o funcție anonimă, dar nu există nici un punct. Se pune întrebarea - cum se utilizează aceste funcții? Următorul exemplu va ajuta să înțeleagă acest lucru:

În acest exemplu, vom atribui o variabilă funcție anonimă, atunci am început efectuarea acestei funcții, închiderea sintaxa $ ();. adică, am numele variabilei cu paranteze adăugate ca un apel de funcție. Vă rugăm să rețineți, semnul $ în numele variabilei nu ne-am eliminat.

Dar acest exemplu nu este foarte convenabil de a utiliza, pentru că poate funcționa doar ispolzovant.

Așa cum este utilizat în circuitul de practică

De obicei, funcții anonime sau de închidere în PHP sunt folosite pentru a le transmite ca parametri pentru alte funcții. PHP are unele funcții încorporate, care preia ca argumente circuit, dar va fi scris de mai jos.

Să luăm o mai complica exemplul nostru.

Aici am creat o funcție obișnuită doStuff () și trece-l ca un parametru pentru funcția noastră anonimă de la o închidere $ variabilă. și apoi rulați-l în funcția doStuff () organismul.

În acest exemplu, funcția doStuff () nu este suficient pentru a verifica închiderea $ variabila de tipul. Pentru a doStuff () funcția funcționează corect în parametrul trebuie să conțină o funcție anonimă.

is_callable) Funcția (

funcții anonime în PHP sunt implementate folosind un sistem de închidere încorporat clasă (PHP 5> = 5.3.0, PHP 7). Adică, fiecare funcție anonimă este un obiect al acestei clase.

clasa de obiecte de închidere sunt, de asemenea, numite Pseudo Reapelări / Callables. Aparținând variabilă la acest tip de date poate fi verificată cu ajutorul funcției is_callable ().

Vă rugăm să rețineți, funcția gettype determină tipul de închidere $ variabila ca un obiect. De aceea is_object funcția va reveni, de asemenea, adevărat. dar nu este un test adecvat în acest caz. Circuitul trebuie să fie verificate să funcționeze exact is_callable.

Utilizarea de proiectare

Funcția anonim poate fi făcută vizibilă variabilă în domeniul de aplicare părinte folosind un design de utilizare. Iată un exemplu:

Cu ajutorul cuvinte cheie utilizează o funcție anonimă, puteți transmite mai multe variabile, ele perecheslyat în paranteze, separate prin virgula.

De asemenea, este important să se înțeleagă că utilizarea design face variabile vizibile din domeniul de aplicare părinte, dar nu este la fel ca și variabilele din domeniul de aplicare la nivel mondial. domeniu de aplicare globală nu se schimbă odată cu schimbarea de performanță a funcțiilor grade de cuiburi diferite.

Argumentele în funcții anonime

Funcția anonim poate fi trecut argumente. Să ne dea un exemplu de argument în funcția noastră.

Cu un argument este foarte simplu, funcții anonime aici nu sunt diferite de obicei.

funcţia preg_replace_callback

I-am promis câteva built-in functii PHP care au ca un circuit argument, aici e una dintre ele: preg_replace_callback

preg_replace_callback - Efectuați o căutare expresie regulată și înlocuiți folosind un apel invers-funcții (închidere).

  • $ Pattern - modelul dorit poate fi fie un șir sau o matrice de siruri.
  • $ Callback - numit apel invers-funcție, care este o serie de elemente potrivite ale liniei de subiect va fi dat. -Funcția de apel invers trebuie să returneze șirul cu înlocuire.
  • $ Subiect - un șir de caractere sau o matrice de siruri de caractere pentru a căuta și înlocui.

Această sintaxă concisă, detalii despre capacitățile acestei caracteristici, puteți verifica manualul on-line pe PHP.

Mai multe funcții preiau circuit de argumente: array_filter. array_map. array_reduce. usort.

funcţia call_user_func

Funcția call_user_func - Apelați o funcție de utilizator dat de primul parametru. Funcția returnează rezultatul sau FALSE în caz contrar.

Exemple de utilizare call_user_func:

EXEMPLU call_user_func utilizați în OOP.

clasa de închidere

Așa cum am scris, funcții anonime în PHP sunt implementate folosind clasa de închidere. Toate funcțiile anonime sunt obiecte ale clasei built-in ..

De asemenea, rețineți că, atunci când apelați obiect ca o funcție, numită __invoke metodă magică (din PHP5.3).