为了避免全局变量或静态配置类,我在实例化每个模型时将数据库对象传递给它们:
$user = new User( App::getDatabase() );
if( !$user->loggedIn() ) doSomething();
应用是具有静态成员的类。
这真的很麻烦,但唯一的选择是从模型类中使用静态类(或全局变量):
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的新手,我还没有尝试过这个。
这是个好主意吗?还有其他选择吗?
在你的代码中的某个地方....
Model::$database = App::getDatabase();
您不需要在每个对象上设置它,因为您是从 Model 继承的。