chciałbym, aby moja funkcja anonimowa korzystała z kontekstu, w jakim powstała (jego zmiennych, itp).
W JavaScripcie podobny kod działa, w PHP widzę, że funkcja anonimowa odcina wszystko „z zewnątrz”. A może o czymś nie wiem?
Tutaj kod:
/** * Funkcja wykorzystująca tekst, który należy wcześniej „złamać” na wiele linii. */ function test() { $text = 'Trololo lol olo lo'; $some_kind_of_context_variable = true; /** * Algorytm łamiący linie potrzebuje mieć metodę mierzenia długości tekstu. * Metoda to może jednak wyglądać różnie – zależnie od kontekstu w jakim ma być użyte łamanie. * Chcę więc przekazywać metodę mierzenia w funkcji anonimowej. */ $lines = wrap($text, 20, function($text_to_measure) { // „Trolololo” – OK, parametr się pięknie przekazał // NULL – Niestety, nie mam dostępu do swojej zmiennej kontekstowej… return $text_width; }); } /** * Funkcja oparta o jednym z algorytmów łamiących tekst. * * @param string $text * @param mixed $max_width * @param function $measure_text * @return array $lines */ function wrap($text, $max_width, $measure_text) { // jakiś fragment algorytmu… $text_width = $measure_text($some_part_of_text_to_measure); // …dalsza część algorytmu… return $lines; }
Z góry dzięki
