Я пытался вызвать функцию, и PHP думает, что я пытаюсь переопределить ее

У меня есть функция с именем "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 ответ

Решение

Ну, 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 проверит, был ли файл уже включен, и если так, не включит (потребует) его снова.

Другие вопросы по тегам