lukasamd
24.08.2010, 17:19:58
Witam,
mam nieco dziwne pytanie choć szczerze spodziewam się tylko jednej, negatywnej odpowiedzi.
Czy istnieje możliwość nadpisania wbudowanej w php funkcji?
Przykład z życia - jest skrypt wywołujący np. addslashes w wielu miejscach.
Chciałbym zmienić jego działanie / coś dodać. Z tym, że bez edycji wielu plików.
W wypadku oop o ile dobrze wiem w takich wypadkach tworzy się adapter, ale co, gdy chodzi o zwykła, do tego natywną funkcję?
Blame
24.08.2010, 17:34:12
Czyli napisanie własnej funkcji i wrzucenie jej do pliku a potem dołączanie include arbo require odpada? Wtedy to tylko jeden plik do edycji.
lukasamd
24.08.2010, 17:38:00
Rzecz w tym, że ta funkcja (przykład wyżej addslashesh) została już użyta wielokrotnie w wielu plikach całego projektu.
Include / require jak najbardziej mogłoby zostać wykonane. Można by nawet tą funkcję zdefiniować w głównym pliku projektu, ale nie na tym problem polega - chodzi o nadpisanie działania addslashes.
#luq
24.08.2010, 17:56:07
Wszystkie funkcje PHP są napisane w C, całość jest do ściągnięcia (
http://php.net/downloads.php) i jeśli by zmienić definicje funkcji addslashes(), skompilować podmienić w Apache to powinno chyba dać radę, czysto teoretycznie (bo praktycznie tego nie robiłem) z moich informacji wynika, że da się. Tylko oczywiście na serwerze musisz mieć możliwość podmiany samego PHP = dedyk.
batman
24.08.2010, 18:12:19
Crozin
24.08.2010, 18:29:35
Hmm... a dlaczego po prostu nie wykorzystasz czegoś takiego jak "Znajdź i zamień" (addslashes -> myAddslashes) na wszystkich plikach projektu? Nadpisywanie natywnych funkcji to baaaardzo słaby pomysł.
lukasamd
24.08.2010, 18:56:32
@#luq:
Różne środowiska, brak takiej możliwości.
@Crozin:
Projekt bazowy może zostać co najwyżej rozwinięty, nie może zostać zmieniony, w tym problem.
@batman:
Wypróbuję - mam jednak pytanie - czy strata wydajności jest duża przy czymś takim?
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.