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