【问题标题】:I tried to call a function and PHP thinks that I'm trying to redeclare it我试图调用一个函数,但 PHP 认为我正在尝试重新声明它
【发布时间】:2013-11-03 17:25:52
【问题描述】:

我有一个名为“logToFile”的函数,我正在尝试调用它,但 PHP 认为我正在尝试重新声明它。

logToFile:

function logToFile($msg) {
$filename = "log.txt";
$fd = fopen($filename, "a");
$str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg;
fwrite($fd, $str . "\n");
fclose($fd);

我对函数的调用:

logToFile("$user->username kicked $arg1 for $arg2.");

请帮忙?

【问题讨论】:

  • 你也有右括号吗?函数不是偷偷在一个类里面吗?它是在同一个文件中声明还是包含在该文件中?
  • 也许你不止一次包含了你的函数所在的文件?
  • 如果 PHP 说您要重新声明它,那么您就这样做了!尝试更改函数名称,看看它是否有效。
  • 错误信息是否有行号?真的是你调用函数的那一行吗?
  • @Barmar: Is it really the line where you call the function? 错误消息中的行号将是函数第一次重新定义的行,不是吗? (demo)

标签: php function call redefine redeclare


【解决方案1】:

嗯,PHP 并不笨。如果 PHP 说您正在重新声明一个函数,那么您就是。当函数定义多次出现时,PHP 会抛出一个 Fatal 错误,类似如下:

致命错误:无法在 Y 行的 /path/to/script 中重新声明 logToFile()(之前在 /path/to/script:X 中声明) p>

这里,X 是您最初声明函数的行,Y 是您尝试重新声明(不是调用,正如您在问题中所说的那样) 功能。检查您的代码以找到该行并将其删除。

为了避免这样的错误,你可以先检查一个函数是否使用function_exists()定义,然后尝试声明它:

if (!function_exists('logToFile')) {
    function logToFile($msg) {
        $filename = "log.txt";
        $fd = fopen($filename, "a");
        $str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg;
        fwrite($fd, $str . "\n");
        fclose($fd);
    }
} else {
    echo 'Trying to re-declare the function';
}

虽然上述方法可以帮助您避免致命错误,但我强烈建议您弄清楚您在哪里重新定义函数并改正它。大多数情况下,这将是由于包含您的函数的文件的多个包含。在这种情况下,您可以简单地使用 require_once() 代替。 PHP 会检查该文件是否已经被包含,如果是,则不再包含(要求)它。

【讨论】:

  • 正是我要写的!! :D
  • 虽然这会阻止错误,但它似乎是错误的处理方法。首先弄清楚你为什么要重新定义函数,然后修复它。
  • @Barmar:更新了答案:)
  • 真的不喜欢你的function_exists 方法。与仅仅让 PHP 显示错误并极大地膨胀代码相比,它没有任何好处。
  • @Duncan:我同意——这就是为什么我在答案末尾添加了附加说明。
猜你喜欢
  • 2021-12-19
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多