Фатальная ошибка 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
    }
}

Надеюсь это поможет!

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