Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja anonimowa korzystająca z kontektu, w którym jest budowana
Forum PHP.pl > Forum > PHP
MacDada
Hej,

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:

  1. /**
  2.  * Funkcja wykorzystująca tekst, który należy wcześniej „złamać” na wiele linii.
  3.  */
  4. function test()
  5. {
  6. $text = 'Trololo lol olo lo';
  7. $some_kind_of_context_variable = true;
  8.  
  9. /**
  10. * Algorytm łamiący linie potrzebuje mieć metodę mierzenia długości tekstu.
  11. * Metoda to może jednak wyglądać różnie – zależnie od kontekstu w jakim ma być użyte łamanie.
  12. * Chcę więc przekazywać metodę mierzenia w funkcji anonimowej.
  13. */
  14. $lines = wrap($text, 20, function($text_to_measure) {
  15. // „Trolololo” – OK, parametr się pięknie przekazał
  16. var_dump($text_to_measure);
  17.  
  18. // NULL – Niestety, nie mam dostępu do swojej zmiennej kontekstowej…
  19. var_dump($some_kind_of_context_variable);
  20.  
  21. return $text_width;
  22. });
  23. }
  24.  
  25. /**
  26.  * Funkcja oparta o jednym z algorytmów łamiących tekst.
  27.  *
  28.  * @param string $text
  29.  * @param mixed $max_width
  30.  * @param function $measure_text
  31.  * @return array $lines
  32.  */
  33. function wrap($text, $max_width, $measure_text)
  34. {
  35. $lines = array();
  36.  
  37. // jakiś fragment algorytmu…
  38.  
  39. $text_width = $measure_text($some_part_of_text_to_measure);
  40.  
  41. // …dalsza część algorytmu…
  42.  
  43. return $lines;
  44. }


Z góry dzięki smile.gif
Crozin
Słowo kluczowe use: http://pl.php.net/manual/en/functions.anonymous.php
MacDada
Cytat(Crozin @ 22.09.2011, 01:42:33 ) *
Bajer, dzięki goatee.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.