Фатальная ошибка php: `не может переопределить функцию` при использовании include_once
У меня есть вспомогательная функция helper.php
с содержанием:
<?php
session_start();
function get_result($dbh, $sql) {
//return mssql_query($sql);
return $dbh->query($sql);
}
?>
который входит в два файла (information.php
а также commercial.php
) с помощью:
include_once 'helper.php'
К сожалению, это генерирует немного запутанное сообщение об ошибке:
PHP Fatal error: Cannot redeclare get_result() (previously declared in helper.php:4) in helper.php on line 4
Я понимаю, что не могу переопределить функции, поэтому я использую include_once
конструировать, но тем не менее он пытается переопределить функцию в любом случае. Зачем?
Если это поможет; Я использую Mustache PHP, и все три файла находятся в partials
папка.
2 ответа
include_once
гарантирует, что файл включен ровно один раз. Он не проверяет содержимое файла или функции в нем. Поэтому, когда добавляются два файла с одинаковым именем функции, вполне естественно возникновение ошибки!
Из руководства:
include_once
может использоваться в тех случаях, когда один и тот же файл может быть включен и оценен более одного раза во время конкретного выполнения скрипта, поэтому в этом случае это может помочь избежать таких проблем, как переопределение функций, переназначение значений переменных и т. д.
Курсив означает, что функция в одном файле, а не в разных файлах.
Один из способов обойти эту ошибку - обернуть ваши вспомогательные функции в проверку.
Вы можете попробовать что-то вроде:
if (! function_exists('get_result')) {
function get_result()
{
//your code
}
}
Надеюсь это поможет!