【发布时间】:2012-10-01 10:26:54
【问题描述】:
奇怪的请求,我正在使用配置管理器功能来要求配置文件,以便我们只加载所需的变量而不是设置数百个变量。
问题是,其中一个文件设置了类和变量,现在它们被包含在内,但无法从主脚本访问。
加载文件的函数是:
function load($OPT){
if (file_exists(ABSPATH. "includes/config/".$OPT.".config.php")){
require_once(ABSPATH. "includes/config/".$OPT.".config.php");
} else {
echo "Missing configuration script ".$OPT.", application has been halted.";
exit();
}
}
我也尝试在课堂上这样做,但遇到了同样的问题
class configManager {
function load($OPT){
if (file_exists(ABSPATH. "includes/config/".$OPT.".config.php")){
require_once(ABSPATH. "includes/config/".$OPT.".config.php");
} else {
echo "Missing configuration script ".$OPT.", application has been halted.";
exit();
}
}
}
它包含的文件将具有如下代码
define('COMPANYNAME', 'NAME');
define("IPADDRESS", $_SERVER['REMOTE_ADDR']); // IP Address of accessing user
require_once (ABSPATH . 'includes/classes/mysql.class.php'); // class to manage the database
$DB = new sqlClass;
var_dump($DB);
现在上面代码中的 var_dump 可以按预期输出,但是如果您执行如下所示的 var_dump,它会返回 null!
require_once (ABSPATH . 'includes/functions/_configmanager.php'); // Class to manage the configuration of the site.
loadconfig("global");
var_dump($DB);
有人对如何实现这一点有任何想法吗?
【问题讨论】:
-
所以你有一个像自动加载器一样的函数,除了它加载配置指令。您在函数中加载它,但您希望能够全局访问它们。你的解决方案应该很简单:使用一个类来获取配置指令。使用自动加载器来包含扩展基本配置类的适当配置类。而你所要做的就是做一些类似
CFGClass::get('variable name');或$cfg->get('variable name')的事情,这取决于你使用的方法。当然,这只是一个简单的示例。 -
@N.B.对不起,我没有按照示例进行操作
-
该示例说不要将文件包含到函数中,使用类来处理配置变量。不要使用
define('variable', 'value'),因为您不能在函数中定义常量和变量并期望它们在任何地方都可以工作。使用 1 个使用 PHP 的自动加载函数加载子类的类,并使用该类获取变量值。该类可以在任何地方访问,并且不会污染全局范围。
标签: php configuration configuration-files