2009-09-05 19 views
24

I stają się błędy takie jak:PHP: jak uniknąć redeclaring funkcji?

Fatal error: Cannot redeclare get_raw_data_list() (previously declared in /var/www/codes/handlers/make_a_thread/get_raw_data_list.php:7) in /var/www/codes/handlers/make_a_thread/get_raw_data_list.php on line 19

jak mogę uniknąć błędów? Czy jest możliwe utworzenie klauzuli IF w celu sprawdzenia, czy funkcja jest zadeklarowana przed jej zadeklarowaniem?

Odpowiedz

27

użycie lub include_oncerequire_once w przeciwieństwie do include lub require gdy w tym pliki, które zawierają swoje funkcje.

W _once rodzeństwo include i require zmusi PHP, aby sprawdzić, czy plik został już uwzględniony/wymagane, a jeśli tak, to nie include/require go ponownie, zapobiegając w ten sposób "nie może redeclare x funkcję ... "Błędy krytyczne.

+0

To ratuje życie! –

+1

@ karim79: Życzę Wam wszystkiego najlepszego w swoim życiu. –

+3

Mimo że odpowiedź karim79 może rozwiązać problem op, to w rzeczywistości nie odpowiada na ten problem. Myślę, że odpowiedź Dooltaz robi to poprawnie. –

68
if(!function_exists("get_raw_data_list")) { 
... define function here ... 
} 

http://us.php.net/function_exists

+1

Może to być przydatne w przypadku polyfills, np. Gdy chcesz dodać funkcję do starszej wersji php, która została wprowadzona w nowszych wersjach php. W takim przypadku 'require_once' nie może uniknąć kolizji. – CodesInChaos

+0

Należy pamiętać, że ten kod powinien być ** dodany ** przed ** użytkowaniem ** funkcji – MujtabaFR

7

"function_exists" dowiesz się, czy funkcja została już zadeklarowana. Chociaż podejrzewam, że masz problem z włączaniem plików więcej niż raz. Kiedy dołączasz plik, używasz require_once lub include_once lub po prostu potrzebujesz/dołączasz?

+0

Technicznie nie jest to całkowicie poprawne. Funkcja PHP może nie istnieć, ale nadal _deklarowana_. na przykład 'function_exists' zwróci' false' dla dowolnej funkcji zdefiniowanej w 'disable_functions' konfiguracji PHP. Jednak funkcje te są nadal _deklarowane_. – fritzmg

4

Jeśli masz do czynienia z klasami method_exists() może być to, czego szukasz:

if(!method_exists(__CLASS__, 'function_name')){ 
    function function_name(){ 

    } 
} 

ten sprawdzi bieżącej klasy, aby to funkcja function_name nie istnieje przed próbą uznaniu jej