我试图调用一个函数,而 PHP 认为我正在尝试重新声明它

Wil*_*ore -1 php function call redefine redeclare

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

日志到文件:

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);
Run Code Online (Sandbox Code Playgroud)

我对函数的调用:

logToFile("$user->username kicked $arg1 for $arg2.");
Run Code Online (Sandbox Code Playgroud)

请帮忙?

Ama*_*ali 5

好吧,PHP 并不愚蠢。如果 PHP 说您要重新声明一个函数,那么您就是。当函数定义多次出现时,PHP 会抛出一个致命错误,类似于下图:

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

在这里, X 是您最初声明函数的行,而 Y 是您尝试重新声明(不是call,如您在问题中所述)函数的位置。检查您的代码以找到此行,然后将其删除。

为了避免这样的错误,你可以先检查一个函数是否被定义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';
}
Run Code Online (Sandbox Code Playgroud)

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

  • 正是我要写的!!:D (3认同)