我有一个理论问题,希望有人能帮我弄清楚。
我目前正在使用 MVC 设计模式在 PHP 中编写一个简单的 Web 应用程序。我已经看过并阅读了一些关于该主题的教程,但它们通常过于复杂或过于简化。
所以我现在有一个简单的User
模型:
class User {
private $username;
private $group; //user, admin, etc
// getters
}
我还有一个Database
实现此类的简单类:
interface DatabaseInterface {
public function connect();
public function disconnect();
public function prepare($sql = null);
public function execute($params = array());
public function rowCount();
public function fetch();
}
我的问题是我应该如何将这个Database
类与填充我的User
类联系起来?
我现在拥有的是另一个被调用的类,它在它的构造函数UserDAO
中传递了类的引用,它有一个调用的函数,然后使用上面的接口方法来检查用户与数据库。Database
ValidateUser()
class UserDAO {
private $database;
public function __construct($database) {
$this->database = $database;
}
public function validateUser($username, $password) {
$this->database->prepare('SELECT * FROM users WHERE...');
....
return true/false;
}
}
而现在我通过构造函数将一个UserDAO
对象传入到User
类中,并在类中添加了另一个ValidateUser()
方法User
,基本上就是调用类ValidateUser()
内部的方法UserDAO
。
新User
班级:
class User {
private $username;
private $group; //user, admin, etc
private $userDAO;
public function __construct($userDAO) {
$this->userDAO = $userDAO;
}
public function validateUser($username, $password) {
if($this->userDAO->validateUser($username, $password)) {
// set stuff that i need
return true;
}
return false;
}
// getters
}
我觉得这件事有些不对劲。任何人都可以帮助我理解这个过程的正常流程吗?
此外,Database
该类是否通常保持静态,所以我可以使用类似的东西来调用连接Database::instance()
?现在我正在 PHP 页面的开头创建一个数据库对象并传递它。
如果有任何不清楚的地方,请随时给我留言,我会尽快修复它。
感谢您的关注,并对帖子的长度感到抱歉。