所以我有一个配置文件,config_inc.php:
<?php
static $config = Array();
$config['dbHost'] = 'localhost';
$config['dbPass'] = '';
$config['dbUser'] = 'root';
$config['dbName'] = 'recipes_comments';
?>
然后我有一个控制器应该使用require_once加载这些变量:
require_once "config_inc.php";
class Controller {
public function regUser() {
echo $config['dbHost'];
}
}
我试图查找具有类似错误的帖子,但找不到提供修复此问题的解决方案。
当我尝试回显config_inc.php中定义的变量时,如上所示,我收到一个错误,即配置未定义。
我的问题:为什么在控制器中未定义配置以及执行此操作的正确方法是什么?
答案 0 :(得分:2)
配置未在Controller中定义,因为它不是全局的。
糟糕的方式
您首先必须在配置文件中将static
替换为global
,然后在函数开头添加global $config
。
正确的方式
不要在php中使用global。相反,在您的类的构造函数中传递您的$config
数组,或以其他方式添加它。例如
require_once "config_inc.php";
class Controller {
private $config;
public function regUser() {
echo $this->config['dbHost'];
}
public function __construct($config)
{
$this->config = $config;
}
}
$controller = new Controller($config);
$controller->regUser();
答案 1 :(得分:-2)
这是一个范围问题。您正试图访问您的类无法从其范围中看到的变量。
$ config是代码中的全局变量。这意味着,他存在于全球范围内。
试试这个:
require_once "config_inc.php";
class Controller {
public function regUser() {
echo $GLOBALS['$config']['dbHost'];
}
}