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

fis*_*man 35 php include

我有一个函数(这正是它从我的文件顶部出现的方式):

<?php
//dirname(getcwd());
function generate_salt()
{
    $salt = '';

    for($i = 0; $i < 19; $i++)
    {
        $salt .= chr(rand(35, 126));
    }

    return $salt;
}
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pas*_*TIN 70

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

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

为了帮助解决第三点,解决方案是使用include_once而不是include包含functions.php文件 - 因此不能包含多次.

  • 胡; 我想所显示的行号不是"精确"的; ; 或者,作为预防措施:您确定要查看"正确"的文件吗? (2认同)
  • 这意味着它可能不止一次被包含在内 (2认同)
  • 在这种情况下,使用include_once而不是include(和require_once而不是require)经常会有所帮助:这样,PHP本身可以确保文件不会被包含多次 (2认同)

T.T*_*dua 44

解决方案1

不要声明函数在循环中(像foreach,for,while...)!在他们面前宣布.

解决方案2

您应该只包含该文件(其中存在该函数):
use:              include_once("functions.php");
而不是:  include ("functions.php");

解决方案3

如果以上都没有帮助,在函数声明之前,添加一个检查以避免重新声明:

if (!function_exists('your_function_name'))   {
  function your_function_name()  {
    ........
  }
}
Run Code Online (Sandbox Code Playgroud)


ahm*_*mdy 7

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

  if (!function_exists('generate_salt'))
{
    function generate_salt()
    {
    ........
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Muh*_*m C 6

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

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

这可能会帮助某人。

  • 在函数中包含函数有什么问题? (2认同)

cod*_*ict 5

您可能不止一次包含文件functions.php.