Dla osób, które miały okazję programować w języku JavaScript zapewne nie będzie to żadna nowość. Niemniej jednak od wersji PHP 5.3, otrzymaliśmy możliwość korzystania z funkcji anonimowych. W tym krótkim wpisie chciałbym wytłumaczyć zasadę ich działania w oparciu o kilka przykładów.

Co to jest?

Funkcja anonimowa, to funkcja jak każda inna z tym wyjątkiem, iż nie wymaga określania jej nazwy i może zostać przypisana do zmiennej, a następnie wywołana z jej poziomu. Najlepiej będzie to zobrazować na prostym przykładzie:

$zmienna = function () {
	echo 'a';
};

$zmienna();

Po wywołaniu powyższego skryptu, na wyjściu otrzymamy:
a
Prawda, że proste? W ten sposób możemy bezpośrednio definiować funkcje zwrotne w wywołaniach funkcji, które tego wymagają:

Dla PHP < 5.3

function echosomething () {

	echo 'callback';

}
// wolanie funkcji zdefiniowanej przez programiste
call_user_func('echosomething');

Dla PHP >= 5.3

call_user_func(function () { echo 'callback';});

Dodatkowo funkcja anonimowa może korzystać ze zmiennych „dziedziczonych” z przestrzeni, w której została zdefiniowana. Aby użyć tej opcji, w deklaracji funkcji stosuje się słowo kluczowe use. Spójrzmy na poniższy przykład:

class Przyklad {

	public static function Wypisz () {

		$a = 'in';

		// przestrzenia ponizszej funkcji jest metoda Wypisz()
		$zmienna = function () use ($a) {

			echo $a;

		};

		$zmienna();

	} 

}
$a = 'out';
Przyklad::Wypisz();

Na wyjściu ujrzymy napis:
in
Osoby zainteresowane odsyłam TUTAJ.

4 Odpowiedzi : “funkcje anonimowe”

  1. Dobrze wiedzieć, bo mój serwer siedzi cały czas na 5.2.9, więc nie miałem jeszcze możliwości przetestowania tych funkcjonalności. ;]

  2. Ralf napisał:

    Ostatnio sporo nowości. Osobiście nie mogę się doczekać gdy znajdę chwile, by zapoznać się z możliwościami Smarciaków 3 beta :) Autorzy sporo naobiecywali.

  3. Smarty rzuciłem już dawno temu dla OPT, także polecam go mocno. Swoją drogą ciekawi mnie bardzo ruch programistów ponownie stosujących czysty kod PHP w szablonach, na razie nie mogę się jakoś przemóc, żeby spróbować.

  4. Widzę, że wrzuciłeś mojego bloga do linków, cieszę się, że uznałeś go za wartościowy „kawałek internetu”. ;] Mam jednak prośbę, żebyś zmienił tytuł odnośnika na „Tomasz Kowalczyk” albo „blog::programisty”, bo takich właśnie nazw używam. Z góry dzięki. ;]

Trackbacks/Pingbacks

  1. Blog o PHP » Archiwum Bloga » late static bindings - [...] funkcje anonimowe - dodatkowe informacje TUTAJ [...]

Pozostaw Odpowiedź