为了避免全局变量或静态配置类,我在实例化它时将数据库对象传递给我的每个模型:
$user = new User( App::getDatabase() );
if( !$user->loggedIn() ) doSomething();
App是一个有静态成员的类。
这非常麻烦,但唯一的选择是在模型类中使用静态类(或全局变量):
class User extends Model {
function loggedIn() {
$database = App::getDatabase();
$database->query('stuff');
// you get the picture
}
}
但这就像使用全局变量一样。
另一个想法是将数据库传递给每个模型继承自的父类:
class Model {
protected static $database
public static function setDatabase($database) {
$this->database = $database;
}
// more stuff here
}
class User extends Model {
function loggedIn() {
parent::$database->query('stuff');
// you get the picture
}
}
Model::setDatabase($myDatabase);
编辑:我刚刚意识到这最后一个例子使我的所有模型都依赖于一个数据库。我无法通过这种方式使用多个数据库...可能是一个严重的限制。
然而,我是PHP的新手,我还没有尝试过。
这是个好主意吗?那里有替代品吗?
答案 0 :(得分:0)
代码中的某处......
Model::$database = App::getDatabase();
您不需要在每个对象上设置它,因为您继承自Model。