“Fatal error: Cannot redeclare <fonction>”
J'ai une fonction(c'est exactement la façon dont il apparaît, à partir du haut de mon fichier):
<?php
//dirname(getcwd());
function generate_salt()
{
$salt = '';
for($i = 0; $i < 19; $i++)
{
$salt .= chr(rand(35, 126));
}
return $salt;
}
...
Et pour une raison quelconque, je reçois l'erreur:
Fatal error: Cannot redeclare
generate_salt() (précédemment déclarée
dans
/Applications/MAMP/htdocs/question-air/includes/fonctions.php:5)
dans
/Applications/MAMP/htdocs/question-air/includes/functions.php
sur la ligne 13
Je ne peux pas comprendre pourquoi ou comment une telle erreur a pu se produire. Des idées?
Vous devez vous connecter pour publier un commentaire.
Cette erreur indique que votre fonction est déjà défini ; ce qui peut signifier :
Pour aider avec le troisième point, une solution serait d'utiliser
include_once
au lieu deinclude
lorsque y compris votrefunctions.php
fichier -- donc il ne peut pas être inclus plus d'une fois.Solution 1
Ne pas déclarer une fonction à l'intérieur d'une boucle (comme
foreach
,for
,while
...) ! Déclarer devant eux.Solution 2
Vous devez inclure ce fichier (au cours de laquelle cette fonction existe) qu'une seule fois:
utilisation:
include_once("functions.php");
au lieu de :
include ("functions.php");
Solution 3
Si aucun des ci-dessus permet, avant la déclaration de la fonction, d'ajouter une case pour éviter la ré-déclaration:
Vous êtes probablement, y compris le fichier functions.php plus d'une fois.
vous pouvez vérifier d'abord si le nom de votre fonction n'existe pas ou pas avant de vous écrire la fonction
Par
OU vous pouvez modifier le nom de la fonction à un autre nom
J'avais étrange behavor quand mon *.php.bak (qui a été créé automatiquement par le bloc-notes) a été inclus dans la compilation. Après j'ai enlevé tous *.php.bak à partir du dossier de cette erreur a disparu.
Peut-être que ce sera utile pour quelqu'un.
Une autre raison possible pour obtenir cette erreur, c'est que votre fonction a le même nom qu'une autre fonction PHP. Par exemple,
où la
checkdate
fonction existe déjà dans PHP.Dans mon cas, c'était à cause de la fonction à l'intérieur d'une autre fonction! une fois je me suis déplacé hors de la fonction, l'erreur a disparu , et tout a fonctionné comme prévu.
Cette réponse explique pourquoi vous ne devriez pas utiliser fonction à l'intérieur de la fonction.
Cela peut aider quelqu'un.
Je n'aime pas
function_exists('fun_name')
parce qu'il s'appuie sur le nom de la fonction transformé en une chaîne de caractères, en plus, vous avez un nom à deux reprises. Pourrait facilement sortir de refactoring.Déclarer votre fonction comme une expression lambda (je n'ai pas vu cette solution mentionnée):
Et de l'utiliser ainsi:
Puis, à la ré-exécution du dit code PHP, la fonction remplace simplement la déclaration précédente.
Je vous recommande d'utiliser
get_included_files
- comme dit Pascal, vous êtes soit à la recherche dans le mauvais fichier d'une manière ou d'cette fonction est déjà défini dans un fichier qui est inclus.require_once
est également utile si le fichier que vous tentez d'inclure est essentiel.J'ai eu le même problème. Et finalement, c'est une double inclusion. Un include dans un fichier nommé X. Et un autre d'inclure dans un fichier nommé Y. Sachant que dans le fichier Y j'avais include ('X')
Depuis le code que vous avez fourni n'inclut pas explicitement quelque chose, soit c'est incldued deux fois, ou (si le script est le point d'entrée pour le code) il doit y avoir un auto-prepend mis en place dans la config serveur web /php.ini ou bien vous avez eu une très obscur extension chargé qui définit la fonction.
signifie que vous avez déjà créé une classe du même nom.
Par Exemple:
Que la deuxième ExampleReDeclare jeter l'erreur.
Cette erreur indique que votre fonction est déjà défini ; ce qui peut signifier :
Je pense que votre confronté à problème à la 3ème position le script incluant ce fichier de plus d'une heure.Ainsi, vous pouvez le résoudre en utilisant
require_once
au lieu derequire
ouinclude_once
au lieu deinclude
pour y compris votrefunctions.php
fichier -- donc il ne peut pas être inclus plus d'une fois.ou vous pouvez créer la fonction dans la boucle
comme
for($i=1; $i<5; $i++)
{
la fonction foo()
{
echo 'quelque chose';
}
}
foo();
//On va afficher le message d'erreur concernant redeclaration