PHP:如何解决';无法重新声明loadModule函数';

PHP:如何解决';无法重新声明loadModule函数';,php,function,fatal-error,Php,Function,Fatal Error,我正在从事一个web项目,我有一个名为init.php的文件,它基本上初始化数据库连接,并使用spl_autoload_register加载所有类。它包含在页面的开头 该文件通常工作正常,但在子目录页中包含该文件时会发生错误。像这样 包括“../includes/init.php” 我遇到了这个致命错误:无法重新声明以前在第行声明的loadModue 文件内容如下所示: <?php ob_start(); $profile_time = array() ; $pr

我正在从事一个web项目,我有一个名为init.php的文件,它基本上初始化数据库连接,并使用spl_autoload_register加载所有类。它包含在页面的开头

该文件通常工作正常,但在子目录页中包含该文件时会发生错误。像这样

包括“../includes/init.php”

我遇到了这个致命错误:无法重新声明以前在第行声明的loadModue

文件内容如下所示:

<?php
    ob_start();

    $profile_time = array() ;
    $profile_time['start_time'] = microtime(TRUE) ;

    include_once( 'settings.php' ) ;
    //ini_set('display_errors', 'on');
    //ini_set('error_reporting', E_ALL);
    // set correct timezone
    date_default_timezone_set('Asia/Calcutta');

    // Set default encoding for multibyte strings
    mb_language('uni');
    mb_internal_encoding('UTF-8');
    mb_http_input('UTF-8');
    mb_http_output('UTF-8');
    mb_regex_encoding('UTF-8');

    function loadModule($className)
    {
        if(file_exists(APP_ROOT.'modules/'.$className.'.php'))
            require_once(APP_ROOT.'modules/'.$className.'.php');
    }

    spl_autoload_register('loadModule');

    $profile_time['before_sql_connection_time'] = microtime(TRUE) ;

    $DB = mysqli_connect( $db_data['host'] , $db_data['user'] , $db_data['pass'] , $db_data['db']);
    Sql::init(array('db' => $DB));

    $profile_time['after_sql_connection_time'] = microtime(TRUE) ;

    @session_start();

    if(User::isLoggedIn())
        $_user = new User($_SESSION['user_id']);
    else
        $_user = new User(0);
    if(isSet($_SESSION['user_id']))
        $user_data = $_user->getDataArray();

    ob_end_clean();
?>
但这是给
类Sql找不到的
致命错误。。。基本上不加载类

我尝试将函数名更改为
loadModule\u new
,但这会导致相同的错误
无法重新声明


我在StackOverflow上找到的所有案例从一开始就不起作用,但我只有在包含在子目录中的情况下才会遇到这个问题。

您多次包含该文件,随后出现混乱

解决此类问题的最佳方案是制定一个清晰的计划,明确哪些文件负责包括哪些文件

不要每次需要将一些代码引入范围时都转储一个
include('whater.php')
。退一步,设计您的包含策略。如果你做对了,你就再也不会有这样的问题了


如果不能做到这一点,使用
include\u once
而不是
include
应该可以帮助您解决这些问题。

您多次包含该文件,随后就会出现混乱

解决此类问题的最佳方案是制定一个清晰的计划,明确哪些文件负责包括哪些文件

不要每次需要将一些代码引入范围时都转储一个
include('whater.php')
。退一步,设计您的包含策略。如果你做对了,你就再也不会有这样的问题了


否则,使用一次
include\u
而不是
include
将有助于您解决这些问题。

函数存在
需要在参数周围加引号:

if(!function_exists('loadModule')){
       function loadModule(){.....}
    }
我认为主要的问题是您包含的其他文件可能包含
“../includes/init.php”

使用
include_一次('../includes/init.php')
并查看它是否有效


此外,在该应用程序的所有代码库中搜索
function loadModule
(带有可变数量的空格,以防万一),以确保您没有在其他任何地方找到
loadModule
function\u的定义,该参数周围有引号:

if(!function_exists('loadModule')){
       function loadModule(){.....}
    }
我认为主要的问题是您包含的其他文件可能包含
“../includes/init.php”

使用
include_一次('../includes/init.php')
并查看它是否有效


此外,请在此应用程序的所有代码库中搜索
function loadModule
(带有可变数量的空格,以防万一),以确保您在其他任何地方都没有找到
loadModule

的定义。抱歉,回复延迟。include_曾经也不起作用…我还在其他地方检查了loadModule定义。。。我认为问题在于包含路径…无论如何,谢谢你的帮助。好的。请检查包含
init.php
文件的所有地方,并将所有文件更改为
include\u once
require\u once
抱歉延迟回复。include_曾经也不起作用…我还在其他地方检查了loadModule定义。。。我认为问题在于包含路径…无论如何,谢谢你的帮助。好的。检查包含
init.php
文件的所有地方,并将所有文件更改为
include\u once
require\u once