“致命错误:无法重新声明<function>”

我有一个函数(从我的文件的顶部看,它的确如此):

<?php //dirname(getcwd()); function generate_salt() { $salt = ''; for($i = 0; $i < 19; $i++) { $salt .= chr(rand(35, 126)); } return $salt; } ... 

由于某种原因,我不断收到错误:

致命错误:无法在/Applications/MAMP/htdocs/question-air/includes/functions.php在线重新声明generate_salt()(以前在/Applications/MAMP/htdocs/question-air/includes/functions.php:5中声明) 13

我无法弄清楚为什么会发生这样的错误。 有任何想法吗?

这个错误说你的函数已经定义了; 这可能意味着:

  • 你有两个文件中定义的相同的function
  • 或者你在同一个文件的两个地方定义了相同的function
  • 或者你的函数被定义的文件包含两次(所以看起来函数被定义了两次)

为了帮助第三点,解决scheme是使用include_once而不是包含你的functions.php文件时包含 – 所以它不能包含多次。

解决scheme1

不要在循环中声明函数(如foreachforwhile等)。 在他们面前宣布。

解决scheme2

您应该只包含一次包含function的文件:
使用: include_once("functions.php");
而不是: include ("functions.php");

解决scheme3

如果以上都没有帮助,在函数声明之前,检查它是否已经存在:

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

你可能不止一次地包含文件functions.php。

你可以先检查你的函数的名字是否存在,然后再编写函数By

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

或者您可以将function名称更改为其他名称

当我的* .php.bak(它是由记事本创build的)被包含在编译中时,我有一种奇怪的行为。 我从文件夹中删除所有* .php.bak后,这个错误消失了。 也许这对别人有帮助

获得该错误的另一个可能原因是您的函数与另一个PHP内置函数具有相同的名称。 例如,

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

checkdate函数已经存在于PHP中。

我build议使用get_included_files – 因为Pascal说你要么以某种方式查看错误的文件,要么已经在包含的文件中定义了这个函数。

如果你正在尝试包含的文件是必需的, require_once也是有用的。

我有同样的问题。 最后它是一个双重包括。 一个包含在名为X的文件中。另一个包含在名为Y的文件中。知道在文件YI中包含('X')

由于你提供的代码没有明确地包含任何东西,所以它要么被包含两次,要么(如果脚本是代码的入口点),那么必须在web服务器config / php.ini中设置一个自动预置或者你已经有一个非常模糊的扩展加载,它定义的function。

意味着你已经创build了一个同名的类。

例如:

 class ExampleReDeclare {} // some code here class ExampleReDeclare {} 

那第二个ExampleReDeclare抛出错误。

或者你可以在循环中创build函数

  • for($ i = 1; $ i <5; $ i ++){function foo(){echo'something'; }}

FOO();
//它将显示有关重新声明的错误

这个错误说你的函数已经定义了; 这可能意味着:

  • 你有两个文件中定义的相同的function
  • 或者你在同一个文件的两个地方定义了相同的function
  • 或者你的函数被定义的文件包含两次(所以看起来函数被定义了两次)

我认为你的第三个脚本包含这个文件的脚本不止一次。所以,你可以通过使用require_once而不是requireinclude_once而不是include来包含你的functions.php文件来解决它 – 所以它不能包含更多比一次。

在我的情况下,这是因为在另一个function内的function! 一旦我将function移出,错误消失了,一切按预期工作。

这个答案解释了为什么你不应该使用function里面的function

这可能有助于某人。