PHP - 未定义的变量配置?

时间:2014-10-09 16:25:31

标签: php configuration

所以我有一个配置文件,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中定义的变量时,如上所示,我收到一个错误,即配置未定义。

我的问题:为什么在控制器中未定义配置以及执行此操作的正确方法是什么?

2 个答案:

答案 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'];
    }
}