我有一个功能(这正是它从我的文件顶部出现的方式):
<?php
//dirname(getcwd());
function generate_salt()
{
$salt = '';
for($i = 0; $i < 19; $i++)
{
$salt .= chr(rand(35, 126));
}
return $salt;
}
...
由于某种原因,我不断收到错误:
致命错误:无法重新声明 generate_salt()(之前已声明 在 /Applications/MAMP/htdocs/question-air/includes/functions.php:5) 在 /Applications/MAMP/htdocs/question-air/includes/functions.php 第13行
我无法弄清楚为什么或如何发生这样的错误。有什么想法吗?
答案 0 :(得分:62)
此错误表示您的功能已定义;这可能意味着:
为了帮助解决第三点问题,解决方案是在包含functions.php
文件时使用include_once
而不是include
- 因此不能多次包含它。
答案 1 :(得分:41)
不要在循环内声明函数(如foreach
,for
,while
...)!在他们面前宣布。
您应该只包含该文件(其中包含该功能):
使用:include_once("functions.php");
而不是:include ("functions.php");
如果以上都没有帮助,在函数声明之前,添加一个检查以避免重新声明:
if (!function_exists('your_function_name')) {
function your_function_name() {
........
}
}
答案 2 :(得分:5)
您可能不止一次包含文件functions.php。
答案 3 :(得分:3)
在编写函数之前,您可以先检查函数的名称是否存在 通过
if (!function_exists('generate_salt'))
{
function generate_salt()
{
........
}
}
或者您可以将功能名称更改为其他名称
答案 4 :(得分:3)
当我的* .php.bak(由记事本自动创建)包含在编译中时,我有一种奇怪的行为。从文件夹中删除所有* .php.bak后,此错误消失了。 也许这会对某人有所帮助。
答案 5 :(得分:3)
获得该错误的另一个可能原因是您的函数与另一个PHP内置函数具有相同的名称。例如,
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');
PHP中已存在checkdate
函数。
答案 6 :(得分:2)
答案 7 :(得分:1)
我不喜欢function_exists('fun_name')
,因为它依赖于将函数名称转换为字符串,而且,您必须两次命名它。很容易因重构而中断。
将您的函数声明为lambda表达式(我没有提到此解决方案):
$generate_salt = function()
{
...
};
并因此使用:
$salt = $generate_salt();
然后,在重新执行上述PHP代码时,该函数将覆盖先前的声明。
答案 8 :(得分:0)
我最近弹出这个窗口,在同一文件 中,在定义函数之前先调用了一个函数,并且没有将返回值分配给变量。为要分配的返回值添加一个变量,以消除错误。
答案 9 :(得分:0)
我想补充一下我的2分经验,这可能会对你们中的许多人有所帮助。
如果在循环内(for,foreach,while)声明一个函数,则将遇到此错误消息。
答案 10 :(得分:0)
如果您遇到Wordpress主题问题,可能是因为尽管您已在wp_options表中重命名了该主题,但尚未重命名样式表。我为此感到挣扎。
答案 11 :(得分:0)
此错误表示您的功能已定义;这可能意味着:
我认为您在第3个位置遇到包含此文件的脚本不止一次的问题。因此,您可以使用require_once
代替require
或include_once
而不是{来解决问题{1}}包含您的include
文件 - 因此不能多次包含该文件。
答案 12 :(得分:0)
表示您已经创建了一个具有相同名称的类。
例如:
class ExampleReDeclare {}
// some code here
class ExampleReDeclare {}
第二个ExampleReDeclare抛出错误。
答案 13 :(得分:0)
我遇到了同样的问题。最后它是双重包括。一个包含在一个名为X的文件中。另一个包含在一个名为Y的文件中。知道在文件Y中我有包含('X')
答案 14 :(得分:0)
由于您提供的代码没有明确包含任何内容,或者它被包含两次,或者(如果脚本是代码的入口点),必须在webserver config /中设置自动前置php.ini或者你加载了一个非常模糊的扩展来定义函数。
答案 15 :(得分:0)
我建议使用get_included_files
- 因为Pascal说您要么以某种方式查看错误的文件,要么已经在已包含的文件中定义了此函数。
require_once
也很有用。
答案 16 :(得分:-1)
或者你可以在循环中创建函数
例如
for($ i = 1; $ i&lt; 5; $ i ++) { function foo() { 回声'某事'; } }
FOO();
//它将显示有关重新声明的错误