Znate nešto o zatvaranju u PHP-u. PHP: Anonimne funkcije

Wikipedia kaže da je anonimna funkcija funkcija koja može postojati bez identifikatora. Zvuči prilično zanimljivo! U ovoj lekciji pokazat ću vam nekoliko primjera kako možete kreirati i uzrokovati funkciju ne-standardnim metodama.

Počnimo odjednom sa primjerima:

Funkcijski test ($ var) (echo "Ovo je $ var";)

Ovo je vrlo jednostavna karakteristika. Sada, pored uobičajenog poziva, možemo pokrenuti ovu značajku pomoću varijable koja pohranjuje ime ove funkcije. Otprilike ovako:

$ f \u003d "test"; $ F ("Promjenjiva funkcija");

Ako pokrenete kod, vidjet ćete poruku Ovo je promjenjiva funkcija. Reći, za reći, obrada pojedinačnih navoda aktivira se brže nego dvostruko.

Ovu tehniku \u200b\u200bmožemo primijeniti u OOP-u. Primjer sa php.net:

Klasa foo (funkcija varijabla () ($ name \u003d "bar"; $ ovo -\u003e $ name (); // Ova poziva The Bar () metoda) funkcija () (echo "ovo je bar";) $ foo \u003d novi foo (); $ FuncName \u003d "varijabla"; $ foo -\u003e $ funcname (); // Ovo poziva $ foo-\u003e varijabla ()

Ovaj je koncept prilično zanimljiv. Može se koristiti za implementaciju povratnih poziva, sadržajne tablice i tako dalje.

Sada ću pokušati da vam objasnim koje su anonimne karakteristike:

$ ulaz \u003d niz (1, 2, 3, 4, 5); $ Izlaz \u003d array_filter ($ ulaz, funkcija ($ v) (povratak $ v\u003e 2;));

funkcija ($ V) (Povratak $ V\u003e 2;) Ovo je anonimna funkcija. Možemo ga dodijeliti varijabli za upotrebu u budućnosti.

$ max \u003d funkcija ($ v) (povratak $ v\u003e 2;); $ ulaz \u003d niz (1, 2, 3, 4, 5); $ Izlaz \u003d array_filter ($ ulaz, max);

Sada se upoznamo sa novom korišnom ključnom riječi. Za to ćemo napisati drugu anonimnu funkciju (radi sa PHP 5.3):

$ MAX_COMP \u003d Funkcija ($ MAX) (Povratna funkcija ($ V) Koristite ($ max) (Povratak $ V\u003e $ max;););); $ ulaz \u003d niz (1, 2, 3, 4, 5); $ Izlaz \u003d array_filter ($ ulaz, $ max_comp (2));

U ovom primjeru koristimo efekt zatvaranja pomoću ključne riječi za upotrebu. Ova tehnika omogućava anonimnu funkciju za pristup vanjskim varijablama. Je li povjetarac proceduralnog programiranja?

Evo još jednog primjera jednostavnije:

$ string \u003d "Hello World!"; $ zatvaranje \u003d funkcija () upotreba ($ string) (Echo $ string;); $ zatvaranje ();

Kao što rekoh, varijable koje želimo koristiti (iz globalnog opsega) u takvim funkcijama moraju se prenijeti pomoću upotrebe. Važno je napomenuti da se samo vrijednost prenosi podrazumevano, tako da ako želite promijeniti sadržaj prenesene varijable i želite da promijeni izvan anonimne funkcije, prenesite vrijednost na adresu:

$ x \u003d 1; $ zatvaranje \u003d funkcija () upotreba (& $ x) (++ $ x;); Echo $ x "
"; $ zatvaranje (); eho $ x."
"; $ zatvaranje (); eho $ x."
";

U ovom primjeru, naša metoda mijenja sadržaj varijable $ x sa svakom anonimnom funkcijom poziva. Da nismo prenijeli adresu varijable, a mi bismo imali samu varijablu tri 1.

Prava ljepota "zatvaranja" je da se ne prevodi globalni prostos imena. Čim je anonimna funkcija izvršila radnju, sve varijable koje se koriste u njemu se automatski uništavaju.

Pozdrav svima i danas ćemo razgovarati o Šta su anonimne funkcije u PHP-u I gdje ih koristiti.

Anonimne funkcijeili drugačije lambda funkcije - Ovo su funkcije koje nemaju ime.

Primjer uobičajene funkcije

Funkcija Funame ($ txt) (
Echo "Moj tekst:" $ txt;
}

$ Func \u003d "Funame";
$ Func ("Moj tekst");
?>

Imamo značajku koja zauzima jedan parametar. Zatim na ime funkcije pišemo varijabli i nazovimo je. Ništa neobično. U Oop Ovaj će stil biti opravdanji.

Klasa Myclass (
Funkcionalna traka () (
// kôd
}
}

$ class \u003d novi myclass ();
$ Func \u003d "bar";
$ Klasa -\u003e $ func ();
?>

Anonimne funkcije

Ako ste upoznati sa anonimnim funkcijama sa jezika JavaScript., onda razumijete zašto su im potrebni, a ako ne, onda čitajte dalje.

Da našu anonimnu funkciju negde na programskom kodu možemo dodijeliti varijabli

$ Func \u003d funkcija () () (
// kôd
};

$ func ();
?>

Imajte na umu da na kraju vrijedi ; jer Dodijelimo varijabilnu vrijednost jednaku funkciji. Ali sva sol nije u tome, već u činjenici da možemo koristiti ove funkcije kao funkcije povratnih poziva. Na primjer:

$ Val \u003d array_filter ($ ulaz, funkcija ($ v) (povratak $ v\u003e 2;));
?>

Koristite ključnu riječ

Opet, ako znate JavaScript.Ovo neće biti problem za vas. Ključna riječ Koristiti Omogućuje vam korištenje recepcije zatvaranje. S njom možemo dostići vanjske varijable.

$ MX \u003d Funkcija ($ high_val) (
Povratna funkcija ($ val) Koristite ($ high_val) (
Povratak $ val\u003e $ high_val;
};
};

$ I \u003d niz (1, 2, 3, 4, 5, 6, 7);
$ O \u003d Array_filter ($ ulaz, $ max_comp (2));
?>

Evo nas u našem lambda funkcije Koristimo globalnu varijablu high_val. Tako da je bilo moguće, moramo nakon riječi funkcija. i parametri u zagradama pišu koristiti I prenesite ime vanjske varijable, koje želimo koristiti unutar funkcijskog koda.

Međutim, nećemo moći mijenjati važnost naše globalne varijable na ovaj način. Da biste to učinili, morate odrediti znak prije njegovog imena. &

$ Name \u003d "Brian";
$ setname \u003d funkcija ($ n) upotreba (& $ name) (
$ name \u003d $ n;
};

$ setname ("David");
Echo $ name;
?>

Zaključak

Dakle, danas ste naučili Što su anonimne funkcije u PHP-u i kako ih koristiti. Sretno!

Funkcija se može dodijeliti varijabli, kao i uobičajenu vrijednost. Da biste to učinili, naziv funkcije mora biti dodijeljen varijabli u obliku niza, ali bez navođenja zagrade:

\\ n ";) $ my_func \u003d" foo "; // Sada možemo pokrenuti FOO () funkciju pomoću $ my_func varijable, koji pohranjuje naziv navedene funkcije kao niz $ my_func (); // nazovite foo () Funkcija?\u003e

Takav PHP koncept ima ime "Funkcijske varijable". Leži u činjenici da ako dovršite varijablu na kraju okruglih zagrada, tada će PHP prevodilac prvo provjeriti, ne postoji funkcija s imenom jednakih smisao Promjenjiva i ako postoji takva funkcija - ona će ga izvesti.

Dakle, kao što je prikazano u gornjem primjeru, možete učiniti samo sa funkcijama određenih korisnika. Ugrađeni jeziku struktura i funkcija, kao što su ECHO, UNSET (), isset () i druge slične stvari se ne mogu direktno dodijeljen varijabli na isti način. Ali možete napraviti funkciju vaših omota (omotač) tako da ugrađene jezičke strukture mogu raditi kao korisnike funkcije.

Anonimne funkcije

Anonimna funkcija - Funkcija koja nema svoje ime, ponekad možete upoznati drugo ime takvih funkcija - Lambda funkcija. Anonimne karakteristike mogu se prenijeti na druge funkcije kao argumente ili dodijeliti varijablu kao konvencionalne vrijednosti:

Napomena Primjer, na kraju definicije funkcije postoji zarez, jer je anonimna funkcija svojstveno vrijednost, a dodijelimo vrijednost varijable, a zatim na kraju, kao i za obična uputstva.

Anonimne funkcije se razlikuju od imenovane činjenicom da su stvorene samo u trenutku kada ih pogubite, tako da ih možete koristiti tek nakon njihove definicije: