2009-09-05 4 views
24

Ich neige dazu, Fehler wie zu bekommen:PHP: Wie vermeide ich, Funktionen neu zu deklarieren?

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

wie kann ich den Fehler zu vermeiden? Ist es möglich, eine IF-Klausel zu erstellen, um zu prüfen, ob eine Funktion deklariert wird, bevor sie deklariert wird?

Antwort

27

Verwenden Sie require_once oder include_once im Gegensatz zu include oder require, wenn Sie die Dateien enthalten, die Ihre Funktionen enthalten.

Die _once Geschwister von include und require wird PHP überprüfen erzwingen, wenn die Datei bereits enthalten/erforderlich ist, und wenn ja, nicht include/require es, wieder dabei zu verhindern 'nicht x-Funktion neu deklarieren kann ... 'fatale Fehler.

+0

Das rettet Leben! –

+1

@ karim79: Ich wünsche Ihnen das Beste in Ihrem Leben. –

+3

Obwohl die Antwort von carim79 das Problem des op beheben kann, beantwortet es das Problem nicht. Ich denke, dass die Antwort von Dooltaz es richtig macht. –

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

http://us.php.net/function_exists

+1

Dies kann für polyfills nützlich sein, das heißt, wenn Sie eine Funktion auf eine ältere Version von PHP hinzufügen möchten, die in neueren Versionen von PHP eingeführt wurde. In diesem Fall kann 'require_once' die Kollision nicht vermeiden. – CodesInChaos

+0

Bitte beachten Sie, dass dieser Code soll ** hinzugefügt werden ** vor ** Verwendung ** der Funktion – MujtabaFR

7

"function_exists" wird Ihnen sagen, wenn eine Funktion bereits erklärt wurde. Obwohl ich vermute, haben Sie vielleicht ein Problem mit dem Einschließen von Dateien mehr als einmal. Wenn Sie eine Datei angeben, verwenden Sie require_once oder include_once oder benötigen Sie nur/include?

+0

Technisch nicht ganz korrekt ist. Eine PHP-Funktion ist möglicherweise nicht vorhanden, aber immer noch _declared_. z.B. 'function_exists' gibt' false' für jede Funktion zurück, die in 'disable_functions' der PHP-Konfiguration definiert ist. Diese Funktionen sind jedoch weiterhin _declared_. – fritzmg

4

Wenn Sie mit Klassen zu tun method_exists() sein könnte, was Sie suchen:

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

    } 
} 

Dadurch wird die aktuelle Klasse überprüfen Sie, dass die Funktion function_name nicht, bevor Sie versuchen es existiert zu erklären

Verwandte Themen