Tudsz valamit a PHP bezárásáról. PHP: névtelen funkciók

A Wikipedia azt mondja, hogy egy névtelen funkció egy olyan funkció, amely azonosító nélkül létezhet. Nagyon érdekesnek hangzik! Ebben a leckében számos példát mutatok arra, hogy hogyan lehet létrehozni és a funkciót nem szabványos módszerekkel.

Kezdjük egyszerre példákkal:

Funkcióvizsgálat ($ var) (Echo "Ez $ var";)

Ez egy nagyon egyszerű funkció. Most, a szokásos hívás mellett futtathatjuk ezt a funkciót olyan változó segítségével, amely tárolja a funkció nevét. Körülbelül ez így:

$ f \u003d "teszt"; $ F ("változó funkció");

Ha elindítja a kódot, akkor az üzenet változó funkció. Azt mondani, hogy mondani, az egyes idézetek feldolgozása gyorsabb, mint kettős.

Ezt a technikát alkalmazhatjuk az OOP-ban. Példa php.net:

Osztályfoo (függvényváltozó () ($ name \u003d "bar"; $ this -\u003e $ name (); // Ez a sáv () módszer) funkciósávot () (visszhang "ez a bár";)) $ foo \u003d új foo (); $ Funcname \u003d "változó"; $ foo -\u003e $ funcname (); // Ez a hívás $ foo-\u003e változó ()

Ez a koncepció elég érdekes. Használható a visszahívások, a táblák és így tovább.

Most megpróbálom elmagyarázni neked, hogy milyen névtelen jellemzők:

$ bemenet \u003d tömb (1, 2, 3, 4, 5); $ Kimenet \u003d Array_Filter ($ bemenet, funkció ($ v) ($ v\u003e 2;));

funkció ($ V) ($ V\u003e 2 visszatérés;) Ez egy névtelen funkció. A jövőben a változóhoz is rendelhetjük.

$ max \u003d funkció ($ V) ($ V\u003e 2; $ bemenet \u003d tömb (1, 2, 3, 4, 5); $ Kimenet \u003d Array_Filter ($ bemenet, $ max);

Most ismerjük meg az új felhasználású kulcsszót. Ehhez egy másik névtelen funkciót írunk (Works with php 5.3):

$ max_comp \u003d funkció ($ max) (Visszatérési funkció ($ v) Használat ($ max) ($ V\u003e $ V\u003e $ max,);););); $ bemenet \u003d tömb (1, 2, 3, 4, 5); $ Kimenet \u003d Array_Filter ($ bemenet, $ max_comp (2));

Ebben a példában bezárási hatást használunk egy használati kulcsszó segítségével. Ez a technika lehetővé teszi a névtelen funkciót a külső változókhoz való hozzáféréshez. Az eljárási programozás szellője?

Itt egy másik példa egyszerűbb:

$ string \u003d "Hello World!"; $ bezárás \u003d funkció () Használja ($ string) (Echo $ string,); $ bezárás ();

Amint azt mondtam, a változók, amelyeket az ilyen funkciókban (globális hatókörből) használni kívánunk (a globális hatókörből), használaton keresztül kell továbbítani. Fontos megjegyezni, hogy csak az értéket továbbítják alapértelmezés szerint, így ha módosítani szeretné a továbbított változó tartalmát, és azt szeretné, hogy megváltoztassa a névtelen funkciót, átvegye az értéket a címre:

$ x \u003d 1; $ bezárás \u003d funkció () Használja (& $ x) (++ $ x,); Echo $ x "
", $ bezárás (); echo $ x."
", $ bezárás (); echo $ x."
";

Ebben a példában a módszerünk megváltoztatja a $ x változó tartalmát minden egyes névtelen funkcióval. Ha nem adtuk meg a változó címét, és maga a változó három 1.

A "lezárás" igazi szépsége az, hogy nem fejezi be a globális névteret. Amint egy névtelen funkció elvégezte az akciót, az összes változó automatikusan megsemmisül.

Helló mindenkinek és ma beszélünk mi a PHP névtelen funkciói És hol használjuk őket.

Névtelen funkciókvagy másképp lambda funkciók - Ezek olyan funkciók, amelyeknek nincs neve.

Példa a szokásos funkcióra

Funkciófunkció ($ txt) (
Echo "A szövegem:" $ txt;
}

$ Func \u003d "Funame";
$ Func ("Saját szöveg");
?>

Van egy olyan funkció, amely egy paramétert tartalmaz. Ezután írjuk a funkció nevét a változóhoz, és hívjuk. Semmi szokatlan. BAN BEN Oop Ez a stílus igazolhatóbb lesz.

Myclass osztály (
Funkciósáv () () () (
// a kód
}
}

$ osztály \u003d új myclass ();
$ Func \u003d "bar";
$ Osztály -\u003e $ Func ();
?>

Névtelen funkciók

Ha ismeri a névtelen funkciókat a nyelvtől JavaScript., akkor érted, miért van szükségük, és ha nem, akkor olvassa el.

Anonim funkciónkat valahol a programkódon, hozzárendelhetjük egy változóhoz

$ Func \u003d funkció () () () () () (
// a kód
};

$ func ();
?>

Ne feledje, hogy a végén érdemes ; mivel A funkcióval egyenlő változó értéket rendelünk hozzá. De az összes só nincs ebben, de abban a tényben, hogy ezeket a funkciókat használhatjuk visszahívási funkciók. Például:

$ Val \u003d array_filter ($ bemenet, funkció ($ v) ($ v\u003e 2,));
?>

Használja a kulcsszót

Ismét, ha tudod JavaScript.Ez nem lesz probléma az Ön számára. Kulcsszó Használat Lehetővé teszi a recepció használatát bezárás. Ezzel elérhetjük a külső változókat.

$ Mx \u003d funkció ($ high_val) (
Visszatérési funkció ($ Val) Használja ($ high_val) ($ high_val) (
Vissza $ Val\u003e $ high_val;
};
};

$ I \u003d tömb (1, 2, 3, 4, 5, 6, 7);
$ O \u003d Array_Filter ($ bemenet, $ max_comp (2));
?>

Itt vagyunk a mi belül lambda funkciók Globális változót használunk high_val. Hogy lehetséges legyen, miután a szó után kell funkció. és paraméterek zárójelben használat És adja át a külső változó nevét, amelyet a funkciókód belsejében szeretnénk használni.

Azonban nem fogjuk megváltoztatni globális változónk fontosságát ilyen módon. Ehhez meg kell adnia egy jelet a neve előtt. &

$ NAME \u003d "BRIAN";
$ setname \u003d funkció ($ n) Használat (& $ NAME) (
$ NAME \u003d $ N;
};

$ SetName ("David");
Echo $ név;
?>

Következtetés

Tehát ma megtanultad mi a névtelen funkciók a PHP-ben és hogyan kell használni őket. Sok szerencsét!

A funkció egy változóhoz, valamint a szokásos értékhez rendelhető. Ehhez a funkciónevet egy karakterlánc formájában lévő változóhoz kell rendelni, de zárójelek megadása nélkül:

\\ n ",) $ my_func \u003d" foo "; () Funkció?\u003e

Az ilyen PHP koncepciónak van neve "függvényváltozók". Ez abban rejlik, hogy ha a kerek zárójelek végén hozzáadja a változóhoz, akkor a PHP tolmács először ellenőrzi, nincs funkció az egyenlő jelentés változó, és ha van ilyen funkció - végrehajtja.

Tehát, amint azt a fenti példában mutatja, csak bizonyos felhasználók funkcióival végezheti el. A beépített nyelvi struktúrák és funkciók, mint például az ECHO, az ECHO, az ENCE (), a BETSET () és más hasonló dolgok ugyanolyan módon rendelhetők közvetlenül a változókhoz. De a wrapper funkciót (wrapper) úgy lehet, hogy a beépített nyelvi struktúrák úgy működjenek, mint a felhasználói funkciók.

Névtelen funkciók

Névtelen funkció - olyan függvény, amely nem rendelkezik saját nevével, néha megfelel az ilyen funkcióknak - a lambda funkciónak. Az anonim funkciókat más funkciókra továbbíthatják, mint argumentumok, vagy hagyományos értékekkénti változót rendelhetnek hozzá:

Vegye figyelembe a példát a funkció meghatározása végén van egy pontosvessző, mivel egy névtelen funkció természeténél fogva érték, és hozzárendeljük a változó értékét, majd a végén, a rendes utasítások esetében, a pontot.

Az anonim funkciók eltérnek attól, hogy az a tény, hogy csak abban a pillanatban jönnek létre, amikor a végrehajtás jön hozzájuk, így csak a definíciójuk után használhatja őket: