Viete niečo o uzávere v PHP. PHP: Anonymné funkcie

Wikipedia hovorí, že anonymná funkcia je funkcia, ktorá môže existovať bez identifikátora. Znie to celkom zaujímavé! V tejto lekcii vám ukážem niekoľko príkladov, ako môžete vytvoriť a spôsobiť funkciu neštandardnými metódami.

Začnime naraz s príkladmi:

Funkčný test ($ var) (echo "Toto je $ var";)

Toto je veľmi jednoduchá funkcia. Teraz, okrem obvyklého hovoru, môžeme túto funkciu spustiť pomocou premennej, ktorá ukladá názov tejto funkcie. Približne toto:

$ f \u003d "test"; $ F ("variabilná funkcia");

Ak začnete kód, zobrazí sa správa, že je to premenná. Povedať, hovoriť, spracovanie jednotlivých citácií sa spustí rýchlejšie ako dvojité.

Túto techniku \u200b\u200bmôžeme aplikovať v OOP. Príklad s php.net:

Trieda foo (premenná funkcie () ($ name \u003d "bar"; $ Toto -\u003e $ NAME (); // Toto volá metódu Bar ()) Function Bar () (ECHO "Toto je BAR";)) $ FOO \u003d nové foo (); $ Funcname \u003d "premenná"; $ foo -\u003e $ funcname (); // To volá $ foo-\u003e premenná ()

Tento koncept je veľmi zaujímavý. Môže byť použitý na implementáciu spätných hovorov, funkcií tabuliek a tak ďalej.

Teraz sa budem snažiť vysvetliť, aké anonymné funkcie sú:

$ Input \u003d Array (1, 2, 3, 4, 5); $ Výstup \u003d array_filter ($ vstup, funkcia ($ V) (návrat $ v\u003e 2;);

funkcia ($ V) (návrat $ v\u003e 2;) Toto je anonymná funkcia. Môžeme ho tiež priradiť k premennej na použitie v budúcnosti.

$ max \u003d funkcia ($ v) (návrat $ v\u003e 2;); $ Input \u003d Array (1, 2, 3, 4, 5); $ Výstup \u003d array_filter ($ vstup, $ max);

Poďme sa oboznámiť s novým kľúčovým slovom použitia. Na to napíšeme ďalšiu anonymnú funkciu (pracuje s PHP 5.3):

$ Max_Comp \u003d Funkcia ($ max) (Return Funkcia ($ V) Použitie ($ max) (návrat $ v\u003e $ max;);); $ Input \u003d Array (1, 2, 3, 4, 5); $ Výstup \u003d Array_filter ($ INPUT, $ Max_COMP (2));

V tomto príklade používame efekt uzáveru pomocou kľúčového slova Používanie. Táto technika umožňuje anonymnú funkciu prístup k externým premenným. Urobil vánok procesného programovania?

Tu je ďalší príklad jednoduchšie:

$ string \u003d "Ahoj svet!"; $ uzáver \u003d funkcia () použitie ($ string) (echo $ string;); $ uzáver ();

Ako som povedal, premenné, ktoré chceme použiť (z globálneho rozsahu) v takýchto funkciách, sa musia zasielať prostredníctvom použitia. Je dôležité si uvedomiť, že iba hodnota sa prenáša štandardne, takže ak chcete zmeniť obsah prenášanej premennej a chcete zmeniť mimo anonymnej funkcie, preneste hodnotu na adresu:

$ x \u003d 1; $ uzáver \u003d funkcia () použitie (& $ x) (++ $ x;); Echo $ x "
"; $ uzáver (); echo $ x."
"; $ uzáver (); echo $ x."
";

V tomto príklade naša metóda mení obsah premennej $ x s každou anonymnou funkciou volania. Ak sme neprešli adresu premennej a mali by sme samotné premennej tri 1.

Skutočná krása "Uzavretia" je, že neopriekol globálny názov priestoru. Akonáhle anonymná funkcia vykonala akciu, všetky premenné používané v nej sa automaticky zničia.

Ahoj všetci a dnes budeme hovoriť Čo je anonymné funkcie v PHP A kde ich použiť.

Anonymné funkciealebo inak fUNKCIE LAMBDA - Toto sú funkcie, ktoré nemajú žiadne meno.

Príklad obvyklého funkcie

Funkcia FunMame ($ txt) (
Echo "Môj text:" $ txt;
}

$ Func \u003d "funame";
$ Func ("môj text");
?>

Máme funkciu, ktorá trvá jeden parameter. Potom napíšeme názov funkcie premennej a zavolajte ju. Nič nezvyčajné. V Oop Tento štýl bude oprávnenejší.

Trieda myclass (
Funkčný panel ()
// kód
}
}

$ class \u003d nová myclass ();
$ Func \u003d "bar";
$ Class -\u003e $ func ();
?>

Anonymné funkcie

Ak ste oboznámení s anonymnými funkciami z jazyka Javascript., potom chápete, prečo sú potrebné, a ak nie, potom čítať ďalej.

Ak chcete, aby sa naša anonymná funkcia niekde na programovom kóde), môžeme ho priradiť premennej

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

$ func ();
?>

Všimnite si, že na konci stojí za to ; pretože Priradíme variabilnú hodnotu rovnajúcu sa funkcii. Ale všetka soľ nie je v tomto, ale v skutočnosti, že tieto funkcie môžeme použiť funkcie spätného volania. Napríklad:

$ Val \u003d array_filter ($ vstup, funkcia ($ V) (návrat $ v\u003e 2;);
?>

Použite kľúčové slovo

Opäť, ak viete Javascript.To pre vás to nebude problém. Kľúčové slovo Použitie Umožňuje používať recepciu uzáver. S tým môžeme dosiahnuť externé premenné.

$ Mx \u003d funkcia ($ high_val)
Return Function ($ Val) použitie ($ high_val)
Návrat $ val\u003e $ high_val;
};
};

$ i \u003d pole (1, 2, 3, 4, 5, 6, 7);
$ O \u003d ARRAY_FILTER ($ INPUT, $ Max_COMP (2));
?>

Tu sme vo vnútri fUNKCIE LAMBDA Používame globálnu premennú high_val. Takže to bolo možné, musíme po Slove funkcie. a parametre v zátvorkách použitie A prejdite na meno externej premennej, ktorú chceme použiť vo vnútri funkčného kódu.

Avšak, nebudeme schopní zmeniť význam našej globálnej premennej týmto spôsobom. Ak to chcete urobiť, musíte zadať znak pred jeho menom. &

$ name \u003d "brian";
$ SETNAME \u003d FUNKCIA ($ N) POUŽITIE (& $ NAME)
$ NAME \u003d $ N;
};

$ SETNAME ("DAVID");
Echo $ meno;
?>

Záver

Takže ste sa naučili Čo je anonymné funkcie v PHP a ako ich používať. Veľa štastia!

Funkcia môže byť priradená k premennej, ako aj obvyklej hodnote. Na tento účel musí byť názov funkcie priradený k premennej vo forme reťazca, ale bez špecifikovania zátvoriek:

n ";) $ my_func \u003d" foo "; // Teraz môžeme spustiť funkciu FOO () pomocou premennej $ my_func, ktorá ukladá názov zadanej funkcie ako reťazec $ my_func (); // zavolať foo () funkcia?\u003e

Takáto PHP koncepcia má názov "Funkčné premenné". Leží v skutočnosti, že ak pridáte k premennej na konci okrúhlych zátvoriek, potom bude tlmočník PHP skontrolovať, neexistuje žiadna funkcia s názvom rovnosti význam Premenná a ak existuje taká funkcia - vykoná to.

Tak, ako je uvedené v príklade vyššie, môžete robiť iba s funkciami niektorých používateľov. Vstavané jazykové štruktúry a funkcie, ako napríklad ECHO, Unset (), Isset () a iné podobné veci nemôžu byť priamo priradené k premenným rovnakým spôsobom. Môžete však vytvoriť funkciu Wrapper (Wrapper) tak, aby vstavané jazykové štruktúry mohli fungovať ako užívateľské funkcie.

Anonymné funkcie

Anonymná funkcia - Funkcia, ktorá nemá vlastné meno, niekedy môžete stretnúť s iným menom takýchto funkcií - Funkcia LAMBDA. Anonymné funkcie môžu byť prenášané na iné funkcie ako argumenty alebo priradiť premennú ako konvenčné hodnoty:

Všimnite si príklad, na konci definície funkcie je bodkočiarka, pretože anonymná funkcia je neoddeliteľnou hodnotou a prideľujeme hodnotu premennej, potom na konci, pokiaľ ide o bežné pokyny, bod sa nanieje.

Anonymné funkcie sa líšia od pomenovaného skutočnosťou, že sú vytvorené len v okamihu, keď k nim prichádza vykonanie, takže ich môžete použiť až po ich definícii: