Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja (preg_replace_callback) w klasie
Forum PHP.pl > Forum > PHP > Object-oriented programming
rafalp
Pisze sobie klasę zamiany tekstu na BB code w w której mam metodę "Message":

  1. <?php
  2. class Walidacja {
  3.  
  4. ...
  5.  
  6. function bbcode_autolink($str)
  7. {
  8. ...
  9. }
  10.  
  11. function Message($str)
  12. {
  13. $str = preg_replace_callback("#([\n ])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#si", "bbcode_autolink", $str);
  14. retun $str;
  15. }
  16.  
  17. ...
  18.  
  19. }
  20. ?>


Problem mam z parametrem "bbcode_autolink" w funkcji "Message" który powinien być poprawym wywołaniem funkcji w tej klasie.
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'bbcode_autolink', to be a valid callback

"\$this->bbcode_autolink" też nie działa.
Jak można poprawie wywołać ta funkcję wewnątrz klasy tak żeby nazwę tej funkcji też można było umieścić wewnątrz tej samej klasy?
DawPi
  1. <?php
  2. function Message($str)
  3. {
  4. $str = preg_replace_callback("#([\n ])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#si", $this->bbcode_autolink($str), $str);
  5. return $str;
  6. }
  7. ?>


Też nie działa ? smile.gif
rafalp
Cytat(DawPi @ 7.07.2008, 16:28:57 ) *
Też nie działa ? smile.gif


Nie :/

Edit:

Znalazłem sam rozwiązanie:

  1. <?php
  2. $str = preg_replace_callback("#([\n ])([a-z]+?)://([a-z0-9-.,?!%*_#:;~&$@/=+]+)#si", Array($this, "bbcode_autolink"), $str);
  3. ?>


Może ktoś wytłumaczyć jak to się dzieje że stosujemy w tym przypadku" Array " prawie jak funkcję i wszystko działa?
bim2
Nie rozumiem "prawie jak funkcje"? Jakoś musiałeś przekazać instancję klasy oraz nazwe metody :] Skąd niby program miałby wiedzieć jaki obiekt utworzyć i z jakimi parametrami? smile.gif
wrzasq
poczytajcie manuala na przyszlosc, bo to w dziale podstawowych konstrukcji jest opisane. nie chce mi sie teraz szukac linka. prawidlowym odwolaniem do funkcji jest:

* nazwa funkcji.
* pelna nazwa metody statycznej.
* tablica dwuelementowa z nazwa klasy i nazwa metody statycznej.
* tablica dwuelementowa z instancja klasi i nazwa metody.
* funkcja stworzona przez wywolanie create_function().

to tak tylko w ramach wykladu, problem jak widac sam sie rozwiazal tongue.gif.

-edit-

o, tutaj jest: http://www.php.net/manual/en/language.pseudo-types.php
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.