问题是,其中一个文件有一个类和变量集,现在它们被包含但是无法从主脚本访问它们。
加载文件的功能是:
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);
任何人对如何实现这一点都有任何想法?
答案 0 :(得分:1)
我不喜欢这种配置解决方案。但是,有一个解决方案。
正如提到的hakra,范围在函数内部。您可以使用global
使变量对外部可见。
示例:
global $DB;
require_once('configManager.php');
loadcfg('global');
global.cfg.php:
global $DB;
$DB = mysql_connect(...);
这将确保$DB
作为全局变量处理,而不是本地变量。
BUT!尽量不要制作全局变量。考虑另一种解决方案。例如,只配置基于环境的参数,而不是整个对象的创建。如果您在其他地方执行此操作,则可以避免globals
并使代码更易读和简单。
答案 1 :(得分:0)
变量的范围是定义它的上下文。在大多数情况下,所有PHP变量只有一个范围。此单一范围也涵盖包含和所需文件。