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

2020/12/01 04:21 · php ·  · 0评论

我有一个函数(从文件顶部开始,这就是它的外观):

<?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

我不知道为什么或如何发生这种错误。有任何想法吗?

此错误表明您的功能已经定义;这可能意味着:

  • 您在两个文件中定义了相同的功能
  • 或者您在同一文件的两个位置定义了相同的功能
  • 或包含两次定义您的函数的文件(因此,似乎两次定义了该函数)

为了帮助您解决第三点,一种解决方案是在包含文件使用,include_once而不是使用它-因此不能多次包含该文件。includefunctions.php

解决方案1

不要在一个循环内声明函数(如foreachforwhile...)!在他们面前声明。

解决方案2

您仅应包含该文件(其中存在该功能)一次。因此,

代替:  
include ("functions.php");

使用:             include_once("functions.php");

解决方案3

如果以上方法均无济于事,请在函数声明之前添加检查以免重新声明:

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

您可能多次包含了functions.php文件。

您可以在编写函数之前先检查函数名称是否不存在

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

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

就我而言,这是因为另一个函数中的函数!一旦我移出函数,错误就消失了,一切都按预期进行。

这个答案解释了为什么不应该在function内部使用function

这可能对某人有帮助。

当我的* .php.bak(由记事本自动创建)包含在编译中时,我表现出奇怪的行为。从文件夹中删除所有* .php.bak后,此错误消失了。也许这对某人会有帮助。

出现该错误的另一个可能原因是您的函数与另一个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');

checkdate函数已经存在于PHP中的位置。

我不喜欢,function_exists('fun_name')因为它依赖于将函数名称转换为字符串,而且,您必须两次命名它。重构很容易中断。

将您的函数声明为lambda表达式(我没有提到此解决方案):

$generate_salt = function()
{
    ...
};

并因此使用:

$salt = $generate_salt();

然后,在重新执行所述PHP代码时,该函数将简单地覆盖先前的声明。

我建议使用get_included_files-就像Pascal所说的那样,您要么看错了文件,要么已在包含的文件中定义了此功能。

require_once 如果您要包含的文件必不可少,它也很有用。

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

由于您提供的代码未明确包含任何内容,或者包含两次,或者(如果脚本是代码的入口点),则必须在网络服务器config / php.ini中设置自动前缀或者,您已经加载了定义功能的模糊扩展。

表示您已经用相同的名称创建了一个类。

例如:

class ExampleReDeclare {}

// some code here

class ExampleReDeclare {}

第二个ExampleReDeclare引发错误。

如果您遇到Wordpress主题问题,那可能是因为尽管您已在wp_options表中重命名了该主题,但并未重命名样式表。我为此感到挣扎。

我想补充一下我的2分经验,这可能对您中的许多人有帮助。

如果在循环(for,foreach,while)内声明一个函数,则将遇到此错误消息。

我最近弹出这个窗口,在同一文件中定义该函数之前先调用了一个函数,并且没有将返回值分配给变量。为要分配的返回值添加一个变量,以消除错误。

此错误表明您的功能已经定义;这可能意味着:

  • 您在两个文件中定义了相同的功能
  • 或者您在同一文件的两个位置定义了相同的功能
  • 或包含两次定义您的函数的文件(因此,似乎两次定义了该函数)

我认为您在包含该文件的脚本的第3位置时遇到的问题不止一次,因此,您可以通过使用require_once而不是requireinclude_once代替include包含functions.php文件来解决它-因此不能多次包含它。

否则您无法循环创建函数

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

foo();

//它将显示有关重新声明的错误

本文地址:http://php.askforanswer.com/zhimingcuowuwufazhongxinshengming.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!