![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Natrafiem w manualu na taką funkcję jak preg_replace_callback. Wiem do czego to służy ale nie rozumiem poniższego wywołania
Wiem, że __CLASS__ zwraca nazwę bieżącej klasy ale nie rozumiem co daje:
Może mi ktoś to wytłumaczyć? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Podobną rzecz widziałem w klasie hwao (metoda generate)
Ten post edytował J4r0d 2.01.2007, 07:00:15 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 26.08.2006 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
To jest sposób na poinformowanie funkcji preg_replace_callback, że ma wywołać (ta funkcja) metodę getRecord klasy __CLASS__. Nie można zastosować $this->getRecord(), bo ta funkcja by coś zwróciła, nie podziała też '$this->getRecord()', bo trzeba by to jakoś dziwnie ewalować (zmienna $this _wewnątrz_ funkcji preg_replace_callback nic nie znaczy), etc.
Polecam lekturę http://php.net/call_user_func |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
To jest sposób na poinformowanie funkcji preg_replace_callback, że ma wywołać (ta funkcja) metodę getRecord klasy __CLASS__. Nie można zastosować $this->getRecord(), bo ta funkcja by coś zwróciła, nie podziała też '$this->getRecord()', bo trzeba by to jakoś dziwnie ewalować (zmienna $this _wewnątrz_ funkcji preg_replace_callback nic nie znaczy), etc. Polecam lekturę http://php.net/call_user_func Czytałem. W powyższym przykłądzie zamieniłem __CLASS__ na this i też działa. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko ładnie tylko ... jaki to ma związek z programowaniem obiektowym?
Przenoszę na php. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dobra załapałem. Tylko, że mam inny problem a nie chcę zakładać osobnego wątku.
Przypadek 1: Chciałbym znaleźć w ciągu tekstowym sad*.txtaaa ciąg *.txt i zamienić go na *.TXT. Problem w tym, że w funkcji show wogóle nie mogę się dostać do odnalezionego wzoru. return $matches[0]; a return $matches[1].'-'.$matches[2]; dają inne wyniki. Z godnie z tym co napisali w manualu to element $matches[0] powinien zawierać Cytat sad*.txtaaa , element $matches[1] powinien zawierać Cytat sad , element $matches[2] powinien zawierać *.txt a element $matches[3] powinien zawierać Cytat aaa . Czyli w funkcji show powinienem dać zapis return strtoupper($matches[2]). Niestety to nie działa. Jak się dostać do dopasowanego wzorca?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
bo i nie ma prawa działać: zapomniałeś o cudzysłowiu:
zresztą bardzo podobny przykład jest w manualu - example 2 - poza tym że tam jest strtolower działanie jest identyczne Ten post edytował devnul 3.01.2007, 02:24:10 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
@devnul: To nie to - bez apostrofów też działa. Poradziłem sobie:
Niezrozumiałe jest dla mnie w jaki sposób odwołać się do części znalezionego wzoru. Np chce wyświetlić całość przekazanego łańcucha, część lewą (czyli do części znalezionej), część odnalezioną, i część od znalezionej do końca. Wogóle nie pomyślał bym o tym ale zasugerowałem się przykładem w manualu. Gdy zamienię return strtoupper($matches[0]); na
Wiecie o co z tym chodzi? I jeszcze inne pytanie: Mam np taki ciąg: Kod dwr2sdfFuser@domena.plsfsdRWE I chcę zamienić znak kropki na \. a znak małpy na \@ Da się to zrobić za jednym razem czy muszę dwa razy wywoływać preg_replace_callback najpierw zamieniając wszystkie kropki a później znak małpy? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Zrób str_replace - on udostępnia możliwość wstawienia arraya z danymi do podmiany.
A'propo jak to było z wydajnościa preg vs. str? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Poprzez sam preg_replace
lub arraye
Ten post edytował cadavre 3.01.2007, 23:54:45 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Krakół Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Heh... byle profilerem czy też własnym skryptem, którego podstawą będzie microtime" title="Zobacz w manualu php" target="_manual. Zapętlasz kilkaset replaceów i liczysz czas.
Ten post edytował cadavre 4.01.2007, 16:40:28 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 00:31 |