2009-12-23 5 views
23

Ho una funzione (questo è esattamente come appare, dalla parte superiore del mio file):"Fatal error: Can not ridichiarare <function>"

<?php 
//dirname(getcwd()); 
function generate_salt() 
{ 
    $salt = ''; 

    for($i = 0; $i < 19; $i++) 
    { 
     $salt .= chr(rand(35, 126)); 
    } 

    return $salt; 
} 
... 

E per qualche ragione, continuo a ricevere l'errore:

Fatal error: Cannot redeclare generate_salt() (previously declared in /Applications/MAMP/htdocs/question-air/includes/functions.php:5) in /Applications/MAMP/htdocs/question-air/includes/functions.php on line 13

Non riesco a capire perché o come potrebbe verificarsi un simile errore. Qualche idea?

risposta

48

Questo errore indica che la funzione è già definita; che può significare:

  • si ha la stessa funzione definita in due file
  • o si ha la stessa funzione definita in due posti nello stesso file
  • o il file in cui è definito la vostra funzione è incluso due volte (in modo, sembra che la funzione è definita due volte)

per aiutare con il terzo punto, una soluzione potrebbe essere quella di utilizzare include_once invece di include quando includendo il file functions.php - quindi non possiamo essere inclusi più che su ce.

+0

ma né la riga 5 né la riga 13 dichiarano alcuna funzione ... – fishman

+2

Hu; Suppongo che i numeri di linea indicati non siano "precisi"; ; o, per precauzione: sei sicuro di guardare il file "giusto"? –

+0

Questo è l'unico file che ha una funzione generate_salt(). – fishman

5

Probabilmente stai includendo il file functions.php più di una volta.

0

Si consiglia di utilizzare get_included_files - come dice Pascal, si sta guardando il file sbagliato in qualche modo o questa funzione è già definita in un file che è stato incluso.

require_once è anche utile se il file che si sta tentando di includere è essenziale.

0

Poiché il codice che hai fornito non include esplicitamente alcunché, o viene incluso due volte o (se lo script è il punto di ingresso per il codice), deve essere impostato automaticamente nella configurazione del server web/php.ini o in alternativa hai un'estensione veramente oscura caricata che definisce la funzione.

0

Ho avuto lo stesso problema. E infine è stata una doppia inclusione. Uno di includere in un file chiamato X. E un altro di includere in un file chiamato Y. Sapendo che nel file di YI aveva includere ('X')

34

Soluzione 1

dont funzione dichiarare all'interno di un ciclo (come foreach, for , while, ecc.). Dichiara prima di loro.

Soluzione 2

È necessario includere la funzione-contained file solo una volta:
uso:               include_once("functions.php");
invece di:   include ("functions.php");

Soluzione 3

Se nessuno di sopra aiuta, prima dichiarazione di funzione, verificare se esiste già:

if (!function_exists('your_function_name')) { 
    function your_function_name() { 
    ........ 
    } 
} 
3

è possibile controllare prima se nome della funzione isn `t esiste o no prima di scrivere la funzione Con

if (!function_exists('generate_salt')) 
{ 
    function generate_salt() 
    { 
    ........ 
    } 
} 

O è possibile cambiare il nome di funzione a un altro nome

3

Ho avuto un comportamento strano quando il mio * .php.bak (che è stato creato automaticamente dal blocco note) è stato incluso nella compilazione. Dopo aver rimosso tutto * .php.bak dalla cartella, questo errore non funzionava. Forse questo sarà utile per qualcuno.

0

oppure è possibile creare funzione nel ciclo

  • come

    for ($ i = 1; $ i < 5; $ i ++) { funzione foo() { eco 'qualcosa'; }}

foo();
// Mostrerà l'errore relativo alla ridichiarazione

0

significa che hai già creato una classe con lo stesso nome.

Per esempio:

class ExampleReDeclare {} 

// some code here 

class ExampleReDeclare {} 

Questo secondo ExampleReDeclare lanciare l'errore.

0

Questi errori indicano che la funzione è già definita; che può significare:

  • si ha la stessa funzione definita in due file
  • o si ha la stessa funzione definita in due posti nello stesso file
  • o il file in cui è definito la vostra funzione è incluso due volte (quindi, sembra che la funzione sia definita due volte)

Penso che il tuo problema di fronte in terza posizione lo script compreso questo file più di una volta.Quindi, puoi risolverlo utilizzando require_once anziché require o include_once anziché include per includere il tuo file functions.php, quindi non può essere incluso più di una volta.

0

Nel mio caso è stato a causa di una funzione all'interno di un'altra funzione! una volta che ho spostato la funzione, l'errore era sparito e tutto ha funzionato come previsto.

This answer spiega perché non si dovrebbe utilizzare la funzione all'interno della funzione.

Questo potrebbe aiutare qualcuno.

+0

Cosa c'è di sbagliato nell'inserire una funzione all'interno di una funzione? – BSUK

2

Un altro motivo possibile per ottenere quell'errore è che la funzione ha lo stesso nome di un'altra funzione incorporata di PHP. Ad esempio,

function checkdate($date){ 
    $now=strtotime(date('Y-m-d H:i:s')); 
    $tenYearsAgo=strtotime("-10 years", $now); 
    $dateToCheck=strtotime($date); 
    return ($tenYearsAgo > $dateToCheck) ? false : true; 
} 
echo checkdate('2016-05-12'); 

dove la funzione checkdate esiste già in PHP.

Problemi correlati