“致命错误:无法重新声明<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
不要在循环中声明函数(如foreach
, for
, while
等)。 在他们面前宣布。
解决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
而不是require
或include_once
而不是include
来包含你的functions.php
文件来解决它 – 所以它不能包含更多比一次。
在我的情况下,这是因为在另一个function内的function! 一旦我将function移出,错误消失了,一切按预期工作。
这个答案解释了为什么你不应该使用function里面的function 。
这可能有助于某人。