Php &引用;致命错误:无法重新声明<;功能>&引用;
我有一个函数(这正是它在我的文件顶部显示的方式):Php &引用;致命错误:无法重新声明<;功能>&引用;,php,include,Php,Include,我有一个函数(这正是它在我的文件顶部显示的方式): 此错误表示您的函数已定义;这意味着: 在两个文件中定义了相同的函数 或者在同一文件的两个位置定义了相同的函数 或者定义函数的文件包含两次(因此,函数似乎定义了两次) 为了帮助解决第三点,解决方案是使用而不是包含functions.php文件,因此不能包含多次。您可能不止一次包含了functions.php文件。我建议使用get\u included\u files——正如Pascal所说,您可能是在看错误的文件,或者是这个函数已在包含的文件
此错误表示您的函数已定义;这意味着:
- 在两个文件中定义了相同的函数
- 或者在同一文件的两个位置定义了相同的函数
- 或者定义函数的文件包含两次(因此,函数似乎定义了两次)
为了帮助解决第三点,解决方案是使用而不是包含functions.php文件,因此不能包含多次。您可能不止一次包含了functions.php文件。我建议使用get\u included\u files
——正如Pascal所说,您可能是在看错误的文件,或者是这个函数已在包含的文件中定义
如果您试图包含的文件是必需的,require\u once
也很有用。因为您提供的代码没有明确包含任何内容,要么包含两次,要么(如果脚本是代码的入口点)在webserver config/php.ini中必须设置一个自动前置,或者加载了一个非常模糊的扩展来定义函数。我也遇到了同样的问题。最后它是一个双重包含。一个包含在名为X的文件中,另一个包含在名为Y的文件中。知道在文件Y中我有include('X')解决方案1
不要在循环内声明函数(如foreach
,for
,while
…)!在他们面前宣布
解决方案2
您应该只包含一次该文件(其中存在该函数)。所以,
而不是:include(“functions.php”)代码>
使用:include_once(“functions.php”)代码>
解决方案3
如果上述任何一项都没有帮助,则在函数声明之前,添加一个检查以避免重新声明:
if (!function_exists('your_function_name')) {
function your_function_name() {
........
}
}
在编写函数之前,可以先检查函数名是否不存在
借
或者您可以将函数的名称更改为另一个名称当我的*.php.bak(由记事本自动创建)包含在编译中时,我有一个奇怪的行为。在我从文件夹中删除所有*.php.bak之后,这个错误就消失了。
也许这会对某人有所帮助。或者您不能在循环中创建函数
- 比如
for($i=1;$i表示您已经创建了一个同名的类
例如:
class ExampleReDeclare {}
// some code here
class ExampleReDeclare {}
第二个示例重新声明抛出错误。此错误表示您的函数已定义;这可能意味着:
- 在两个文件中定义了相同的函数
- 或者在同一文件的两个位置定义了相同的函数
- 或者定义函数的文件包含两次(因此,函数似乎定义了两次)
我认为您在第三位面临的问题是脚本多次包含此文件。因此,您可以使用instead of或include_once
而不是include
来解决此问题,因为它包含了函数.php
文件,所以不能包含多次。在我的情况下,这是因为另一个函数!一旦我移出该函数,错误就消失了,一切都按预期进行
解释为什么不应在函数中使用函数
这可能会对某些人有所帮助。出现此错误的另一个可能原因是您的函数与另一个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
函数。我不喜欢函数存在('fun\u name')
,因为它依赖于将函数名转换为字符串,另外,您必须对其命名两次。可能很容易因重构而中断
将函数声明为lambda表达式(我还没有看到提到过此解决方案):
并据此使用:
$salt = $generate_salt();
然后,在重新执行上述PHP代码时,该函数只会覆盖前面的声明。如果您有Wordpress主题问题,可能是因为虽然您在wp_选项表中重命名了主题,但您没有重命名样式表。我对此感到很挣扎。我想添加我的2美分经验,这可能会有所帮助对你们许多人来说
如果在循环中声明函数(for、foreach、while),您将面临此错误消息。我最近弹出了一个弹出窗口,在同一文件中,函数在定义之前被调用,但它没有将返回值分配给变量。为要分配的返回值添加一个变量会使错误消失。Hu;我想所指示的行号没有“精确”;或者,作为预防措施:您确定查看的是“正确”文件吗?这是唯一一个包含generate_salt()的文件函数。这意味着它可能被包含了不止一次,我想就是这样——如何修复它,我不知道,因为我已经把这个项目设置得非常糟糕。我想应该重新启动。使用include_once代替include(和require_once代替require)在这种情况下通常会有所帮助:通过这种方式,是PHP本身确保一个文件不被多次包含。在函数中包含函数有什么错?这个答案帮助了我,这是对我问题的解释。这很好,你让我的一天@AlexHighHigh变得非常酷,这看起来很明显,但没有人说关于它的一切。我会在某个时候详细说明它的描述,但现在我把它保存在我的lil magic库中,这些有用的片段将在以后的日子里再回来:你是一个英雄
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');
$generate_salt = function()
{
...
};
$salt = $generate_salt();