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

时间:2013-11-03 17:25:53

标签: php function call redefine redeclare

我有一个名为“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.");

请帮忙吗?

1 个答案:

答案 0 :(得分:4)

嗯,PHP并不愚蠢。如果PHP说你正在重新声明一个函数,那么你就是。当函数定义多次出现时,PHP将抛出致命错误,类似于下面的错误:

  

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

在这里,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将检查文件是否已被包含,如果已包含,则不再包括(要求)。