Víš něco o uzávěrech v PHP. PHP: Anonymní funkce

Wikipedia říká, že anonymní funkce je funkce, která může existovat bez identifikátoru. Zní to docela zajímavé! V této lekci vám ukážu několik příkladů, jak můžete vytvořit a způsobit funkci s nestandardními metodami.

Začněme najednou s příklady:

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

To je velmi jednoduchá funkce. Nyní, kromě obvyklého volání, můžeme tuto funkci spustit pomocí proměnné, která ukládá název této funkce. Přibližně takto:

$ f \u003d "test"; $ F (funkce variabilní ");

Pokud spustíte kód, zobrazí se zpráva Toto je variabilní funkce. Říkat, říci, zpracování jednotlivých citací je spuštěno rychlejší než dvojnásobek.

Tuto techniku \u200b\u200bmůžeme aplikovat v OOP. Příklad s php.net:

Class Foo (Funkce proměnná () ($ NAME \u003d "Bar"; $ Toto -\u003e $ Jméno (); // Tato volání metody Bar ()) Funkční lišty () (echo "to je bar";)) $ foo \u003d Nová foo (); $ Funcname \u003d "proměnná"; $ foo -\u003e $ funcname (); // Tato volání $ Foo-\u003e Proměnná ()

Tento koncept je poměrně zajímavý. Lze jej použít k implementaci zpětných volání, prvek tabulek a tak dále.

Teď se pokusím vysvětlit, jaké anonymní funkce jsou:

$ vstup \u003d pole (1, 2, 3, 4, 5); $ Výstup \u003d array_filter ($ vstup, funkce ($ v) (vrátit $ v\u003e 2;));

funkce ($ v) (vrátit $ v\u003e 2;) Toto je anonymní funkce. Můžeme také přiřadit proměnné používat v budoucnu.

$ max \u003d funkce ($ v) (vrátit $ v\u003e 2;); $ vstup \u003d pole (1, 2, 3, 4, 5); $ Výstup \u003d array_filter ($ vstup, $ max);

Nyní se seznámí s klíčovým slovem nového použití. Za to budeme psát další anonymní funkce (práce s PHP 5.3):

$ MAX_COMP \u003d Funkce ($ Max) (funkce návratu ($ v) Použití ($ Max) (vrátit $ v\u003e $ Max;);););); $ vstup \u003d pole (1, 2, 3, 4, 5); $ Výstup \u003d array_filter ($ vstup, $ max_comp (2));

V tomto příkladu používáme uzavírací efekt pomocí klíčového slova použití. Tato technika umožňuje anonymní funkci pro přístup k externím proměnným. Udělal vánek procesního programování?

Zde je další příklad jednodušší:

$ string \u003d "Ahoj World!"; $ CLOSURE \u003d funkce () Použijte ($ string) (echo $ string;); $ Uzavření ();

Jak jsem řekl, proměnné, které chceme používat (z globálního rozsahu) v takových funkcích, musí být přenášeny pomocí použití. Je důležité poznamenat, že pouze hodnota je vysílána ve výchozím nastavení, takže pokud chcete změnit obsah vysílané proměnné a chcete změnit mimo anonymní funkci, přeneste hodnotu na adresu:

$ x \u003d 1; $ CLOSURE \u003d funkce () použití (& $ x) (++ $ x;); Echo $ x. "
"; $ uzavření (); echo $ x.
"; $ uzavření (); echo $ x.
";

V tomto příkladu se naše metoda změní obsah proměnné $ x s každým funkcí anonymní volání. Pokud jsme neprošli adresu proměnné a my bychom měli proměnnou samotnou tři 1.

Opravdová krása "uzavření" je, že nevrátí globální obor názvů. Jakmile anonymní funkce provedla akci, všechny proměnné používané v něm jsou automaticky zničeny.

Ahoj všichni a dnes budeme mluvit co je anonymní funkce v PHP A kde je používat.

Anonymní funkcenebo jinak funkce lambda - Jedná se o funkce, které nemají žádné jméno.

Příklad obvyklé funkce

Funkce Funkální ($ txt) (
Echo "můj text:" $ txt;
}

$ FUNC \u003d "FOVOAME";
$ Func ("můj text");
?>

Máme funkci, která trvá jeden parametr. Pak zapisujeme název funkce na proměnnou a zavoláme jej. Nic neobvyklého. V Oop Tento styl bude oprávněn.

Třída myclass (
Funkční pruh () ()
// kód
}
}

$ Class \u003d New MyClass ();
$ Func \u003d "bar";
$ Třída -\u003e $ func ();
?>

Anonymní funkce

Pokud jste obeznámeni s anonymními funkcemi z jazyka JavaScript.Pak pochopíte, proč jsou potřební, a pokud ne, pak si přečtěte.

Chcete-li způsobit, že naše anonymní funkce někde na programovém kódu, můžeme ji přiřadit proměnné

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

$ func ();
?>

Všimněte si, že na konci stojí za to ; protože Přiřazujeme variabilní hodnotu rovnou funkce. Ale celá sůl není v tomto, ale ve skutečnosti, že tyto funkce můžeme použít jako funkce zpětného volání. Například:

$ Val \u003d array_filter ($ vstup, funkce ($ v) (vrátit $ v\u003e 2;));
?>

Použít klíčové slovo

Opět, pokud víte JavaScript.To nebude problém pro vás. Klíčové slovo Použití Umožňuje používat recepci uzavření. S tím můžeme dosáhnout externích proměnných.

$ Mx \u003d funkce ($ high_val) (
Zpětné funkce ($ VAL) ($ HIGH_VAL) (
Vrátit $ val\u003e $ high_val;
};
};

$ i \u003d pole (1, 2, 3, 4, 5, 6, 7);
$ O \u003d array_filter ($ vstup, $ max_comp (2));
?>

Zde jsme uvnitř našeho funkce lambda Používáme globální proměnnou high_val.. Takže to bylo možné, musíme po tom slova funkce. a parametry v závorkách použití A předejte název externí proměnné, které chceme používat uvnitř funkčního kódu.

Nebudeme však moci změnit význam naší globální proměnné tímto způsobem. Chcete-li to provést, musíte zadat znamení před jeho názvem. &

$ jméno \u003d "brian";
$ setName \u003d Function ($ n) Použití (& $ Jméno) (
$ NAME \u003d $ n;
};

$ setname ("David");
Echo $ jméno;
?>

Závěr

Takže dnes jste se naučili co je anonymní funkce v PHP a jak je používat. Hodně štěstí!

Funkce může být přiřazena proměnné, stejně jako obvyklá hodnota. Chcete-li to provést, musí být název funkce přiřazen proměnné ve formě řetězce, ale bez určování závorek:

n ";) $ my_func \u003d" foo "; // Nyní můžeme spustit funkci foo () pomocí proměnné $ my_func, která ukládá název zadané funkce jako řetězec $ my_func (); // volání foo () Funkce?\u003e

Takový koncept PHP má název "Funkční proměnné". To leží ve skutečnosti, že pokud přidáte do proměnné na konci kulatých závorek, pak se interpret PHP zkontroluje jako první, neexistuje žádná funkce se jménem stejné význam Proměnná a pokud je taková funkce - provede to.

Takže, jak je uvedeno v příkladu výše, můžete udělat pouze s funkcemi některých uživatelů. Vestavěné jazykové struktury a funkce, jako například ECHO, UNSET (), ISSET () a další podobné věci nemohou být přímo přiřazeny k proměnným stejným způsobem. Ale můžete provést funkci wrapperu (wrapper) tak, aby vestavěné jazykové struktury mohly fungovat jako uživatelské funkce.

Anonymní funkce

Anonymní funkce - Funkce, která nemá své vlastní jméno, někdy můžete splnit další název takových funkcí - funkce Lambda. Anonymní funkce mohou být přenášeny do jiných funkcí jako argumenty nebo přiřadit proměnnou jako konvenční hodnoty:

Všimněte si příkladu, na konci definice funkce je středník, protože anonymní funkce je hodnota hodnota a přidělujeme hodnotu proměnné, pak na konci, jako pro běžné pokyny, bod je pokoveno.

Anonymní funkce se liší od pojmenovaného skutečností, že jsou vytvořeny pouze v okamžiku, kdy k nim provede, takže je můžete použít pouze po jejich definici: