当我使用require_once
并尝试访问所需文件中的变量时,我得到一个错误,即变量($db
)未定义。
我试图将require_once
语句放在几个不同的位置,因为我认为它可能是变量范围问题,但此时我尝试在构造函数中调用它并将值赋给类变量。
我的配置类:
class Config {
public $db;
public function __construct() {
require_once (BASE_DIR."config/DBConfig.php");
$this->db = $db;
}
}
DBConfig文件如下所示:
$db['default']['hostname'] = 'localhost'
答案 0 :(得分:8)
我会采用不同的方式并使用依赖注入,为您提供:
public function __construct((IDb)$Db) {
$this->db=$Db;
}
这样,以后更容易测试你的软件,显然这个类需要一些数据库对象。这使得您的代码也更少耦合,这似乎是一个很好的架构决策。
此外,它还可以让您更轻松地开始使用例如不同的数据库类,从而节省您以后的时间和精力。
答案 1 :(得分:2)
似乎由于Require_once仅在第一次创建类时获取文件,因此该变量仅在我创建的第一个对象中可用。
然后,将require_once
更改为require
。 require_once
用于包含定义类和函数的文件,a)不需要包含多次,b)如果包含多次,则会导致错误。如果您始终要包含该文件,请跳过_once
。
话虽如此,不止一次包括数据库配置是设计糟糕的标志。