Jūs zināt kaut ko par slēgšanu PHP. PHP: Anonīmas funkcijas

Wikipedia saka, ka anonīma funkcija ir funkcija, kas var pastāvēt bez identifikatora. Izklausās diezgan interesanti! Šajā nodarbībā es jums parādīšu vairākus piemērus, kā jūs varat izveidot un radīt funkciju ar nestandarta metodēm.

Sāksim uzreiz ar piemēriem:

Funkcijas tests ($ var) (atbalss "Tas ir $ VAR";)

Šī ir ļoti vienkārša iezīme. Tagad, papildus parastajam zvanam, mēs varam palaist šo funkciju, izmantojot mainīgo, kas saglabā šīs funkcijas nosaukumu. Aptuveni līdzīgi:

$ f \u003d "tests"; $ F ("mainīgā funkcija");

Ja sākat kodu, jūs redzēsiet ziņu, kas ir mainīga funkcija. Teikt, teikt, viena citātu apstrāde tiek aktivizēta ātrāk nekā divreiz.

Mēs varam izmantot šo metodi OOP. Piemērs ar php.net:

Klases foo (funkciju mainīgais () ($ name \u003d "bārs"; $ tas -\u003e $ nosaukums (); // Tas prasa bāru () metodi) funkciju joslu () (ECHO "Tas ir bārs";)) $ foo \u003d jauns foo (); $ Funcname \u003d "mainīgais"; $ foo -\u003e $ funcname (); // Tas prasa $ foo-\u003e mainīgais ()

Šis jēdziens ir diezgan interesants. To var izmantot, lai īstenotu zvanus, funkciju tabulas un tā tālāk.

Tagad es centīšos izskaidrot jums, kādas anonīmās funkcijas ir:

$ ieeja \u003d masīvs (1, 2, 3, 4, 5); $ Izeja \u003d ARRAY_FILTER ($ ievade, funkcija ($ V) (atgriezties $ V\u003e 2;);

funkcija ($ V) (atgriezties $ V\u003e 2;) Šī ir anonīma funkcija. Mēs varam arī piešķirt to mainīgajam, lai izmantotu nākotnē.

$ max \u003d funkcija ($ v) (atgriezties $ V\u003e 2;); $ ieeja \u003d masīvs (1, 2, 3, 4, 5); $ Izeja \u003d ARRAY_FILTER ($ ievade, $ max);

Tagad pieņemsim iepazīties ar jauno izmantošanu atslēgvārdu. Mēs rakstīsim vēl vienu anonīmu funkciju (darbojas ar PHP 5.3):

$ max_comp \u003d funkcija ($ max) (atgriešanās funkcija ($ V) ($ max) (atgriezties $ V\u003e $ max;);); $ ieeja \u003d masīvs (1, 2, 3, 4, 5); $ Izeja \u003d ARRAY_FILTER ($ ievade, $ max_comp (2));

Šajā piemērā mēs izmantojam slēgšanas efektu, izmantojot lietošanas atslēgvārdu. Šī metode ļauj anonīmai iezīmei piekļūt ārējiem mainīgajiem. Vai procesuālās programmēšanas brīze?

Šeit ir vēl viens piemērs vienkāršāks:

$ string \u003d "hello world!"; $ slēgšana \u003d funkcija () lietošana ($ virkne) (echo $ string;); $ slēgšana ();

Kā jau teicu, mainīgie, kurus mēs vēlamies izmantot (no globālās darbības jomas) šādās funkcijās, ir jānosūta, izmantojot lietošanu. Ir svarīgi atzīmēt, ka pēc noklusējuma tiek nosūtīta tikai vērtība, tādēļ, ja vēlaties mainīt pārraidītā mainīgā satura un vēlaties, lai tā mainītu ārpus anonīmas funkcijas, pārsūtiet vērtību uz adresi:

$ x \u003d 1; $ slēgšana \u003d funkcija () izmantošana (& $ x) (++ $ x;); Echo $ x "
"; $ slēgšana (); echo $ x."
"; $ slēgšana (); echo $ x."
";

Šajā piemērā, mūsu metode maina saturu $ X mainīgo ar katru zvanu anonīmu funkciju. Ja mēs nebūtu nokārtojuši mainīgo adresi, un mums būtu mainīgais trīs mainīgais trīs 1.

"Slēgšanas" patiesais skaistums ir tas, ka tas nenorauj globālo vārdu telpu. Tiklīdz anonīma funkcija veica darbību, visi izmantotie mainīgie tiek automātiski iznīcināti.

Labdien visi un šodien mēs runāsim par kas ir anonīmas funkcijas PHP Un kur tos izmantot.

Anonīmas funkcijasvai citādi lambda funkcijas - tās ir funkcijas, kurām nav nosaukuma.

Parastās funkcijas piemērs

Funkcija Funame ($ txt) (
Echo "Mans teksts:" $ txt;
}

$ FUNC \u003d "FUNAME";
$ FUNC ("Mans teksts");
?>

Mums ir iezīme, kas aizņem vienu parametru. Tad mēs uzrakstīt funkcijas nosaukumu mainīgajam un zvaniet tam. Nekas neparasts. Iebildums Ķēniņa Šis stils būs pamatīgāks.

Klases myclass (
Funkciju josla () (
// kods
}
}

$ klase \u003d jauns myclass ();
$ FUNC \u003d "BAR";
$ Klase -\u003e $ FUNC ();
?>

Anonīmas funkcijas

Ja esat iepazinies ar anonīmām funkcijām no valodas JavaScript., tad jūs saprotat, kāpēc tie ir nepieciešami, un, ja ne, tad lasiet tālāk.

Lai radītu mūsu anonīmu funkciju kaut kur uz programmas kodu, mēs varam piešķirt to mainīgajam

$ FUNC \u003d FUNKCIJA () (
// kods
};

$ FUNC ();
?>

Ņemiet vērā, ka beigās tas ir vērts ; jo Mēs piešķiram mainīgu vērtību, kas vienāda ar funkciju. Bet viss sāls nav šajā, bet fakts, ka mēs varam izmantot šīs funkcijas kā atzvanīšanas funkcijas. Piemēram:

$ VAL \u003d ARRAY_FILTER ($ ievade, funkcija ($ V) (atgriezties $ V\u003e 2;));
?>

Izmantot atslēgvārdu

Atkal, ja jūs zināt JavaScript.Tas jums nebūs problēma. Atslēgvārds Izmantot Ļauj izmantot reģistratūru slēgšana. Ar to mēs varam sasniegt ārējos mainīgos lielumus.

$ MX \u003d funkcija ($ High_VAL) (
Atgriezties funkcija ($ val) Lietot ($ High_VAL) (
Atgrieziet $ VAL\u003e $ High_val;
};
};

$ i \u003d masīvs (1, 2, 3, 4, 5, 6, 7);
$ O \u003d ARRAY_FILTER ($ ievade, $ max_comp (2));
?>

Šeit mēs esam mūsu iekšienē lambda funkcijas Mēs izmantojam globālu mainīgo high_val. Lai tas būtu iespējams, mums ir pēc vārda funkcija. un parametri iekavās rakstīt izmantot Un nokārtojiet ārējā mainīgā nosaukumu, kuru mēs vēlamies izmantot funkciju koda iekšpusē.

Tomēr mēs nevarēsim mainīt mūsu globālā mainīgā lieluma nozīmi šādā veidā. Lai to izdarītu, pirms tā nosaukuma ir jānorāda zīme. &

$ nosaukums \u003d "Brian";
$ SETNAME \u003d FUNCTION ($ N) LIETOŠANA (& $ nosaukums) (
$ nosaukums \u003d $ N;
};

$ Setname ("David");
Echo $ nosaukums;
?>

Secinājums

Tātad šodien esat iemācījušies kas ir anonīmas funkcijas PHP un kā tos izmantot. Veiksmi!

Funkciju var piešķirt mainīgajam, kā arī parastajai vērtībai. Lai to izdarītu, funkcijas nosaukumam ir jāpiešķir mainīgajam virknes formā, bet neprecizējot iekavās:

\\ n ";) $ my_fun \u003d" foo "; // Tagad mēs varam palaist foo () funkciju, izmantojot $ my_func mainīgo, kas saglabā norādītās funkcijas nosaukumu kā virkni $ my_func (); // zvanīt foo () funkcija?\u003e.

Šādam PHP koncepcijai ir nosaukums "Funkciju mainīgie". Tas ir tas, ka, ja jūs pievienojat mainīgajam kārtas iekavās, tad PHP tulks vispirms pārbaudīs, nav funkciju ar vienādu nosaukumu nozīme mainīgs un, ja ir šāda funkcija - tas izpildīs to.

Tātad, kā parādīts iepriekš minētajā piemērā, jūs varat darīt tikai ar dažu lietotāju funkcijām. Iebūvētas valodas struktūras un funkcijas, piemēram, atbalss, atiestatīts (), sīpakus () un citas līdzīgas lietas, nevar tieši piešķirt mainīgajiem lielumiem tādā pašā veidā. Bet jūs varat padarīt savu iesaiņojuma funkciju (iesaiņojuma), lai iebūvētās valodas struktūras varētu strādāt kā lietotāja funkcijas.

Anonīmas funkcijas

Anonīma funkcija - funkcija, kurai nav sava vārda, dažreiz jūs varat izpildīt citu šādu funkciju nosaukumu - Lambda funkciju. Anonīmas funkcijas var nosūtīt uz citām funkcijām kā argumentiem vai piešķirt mainīgo kā parastās vērtības:

Ņemiet vērā šo piemēru, funkcijas definīcijas beigās ir semikols, jo anonīma funkcija ir raksturīga vērtība, un mēs piešķiram mainīgā vērtību, tad beigās, kā parastiem norādījumiem, punkts ir pārklāts.

Anonīmas funkcijas atšķiras no fakta nosaukuma, ka tie tiek veidoti tikai brīdī, kad tie tiek sasniegti, lai tos izmantotu tikai pēc to definīcijas: