首页 / PHP / php – MVC,模型和数据访问对象
php – MVC,模型和数据访问对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – MVC,模型和数据访问对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2730字,纯文字阅读大概需要4分钟。
内容图文
![php – MVC,模型和数据访问对象](/upload/InfoBanner/zyjiaocheng/785/db577d3f0f8549ba804987d00868b165.jpg)
我有一个理论问题,我希望有人能帮助我弄明白.
我目前正在使用MVC设计模式在PHP中编写一个简单的Web应用程序.我已经看过并阅读了一些关于这个主题的教程,但它们通常要么过于复杂,要么过于简单.
所以我目前所拥有的是一个简单的用户模型:
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();
}
我的问题是我应该如何通过填充我的User类链接这个Database类?
我目前所拥有的是另一个名为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类,并在User类中添加另一个ValidateUser()方法,它基本上只调用UserDAO类中的ValidateUser()方法.
新的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页面的开头创建一个数据库对象并传递它.
如果有什么不清楚的话,请随时给我发表评论,我会尽快修复它.
感谢您对帖子的长度感到满意.
解决方法:
这取决于您的解决方案应该是最新的.
独生子
“最旧的”版本是在任何地方都有一个静态连接.你通过使用单例来实现这一点:
class database {
private $instance = NULL;
private function __construct()
public function getDb() {
return $this->instance?: $this->instance = new database();
}
}
注册处
第二个更新的解决方案是使用注册表:
您可以拥有一个由所有其他类扩展的基类,并为像这样的调用提供方法
$this->getRegistry()->getDb
通常,注册表在脚本的开头填充,例如在引导程序中.
优点是您可以更好地对组件进行单元测试,因为没有静态部件,您可以为开发和生产环境定义不同的注册表……
依赖注入
依赖注入的第三个“最新”和最好的方法.
通常你会有一些框架为你做这件事.这个想法是,无论何时调用类的构造函数,所有依赖项(如数据库连接)都由框架注入.
这样您就可以轻松定义“用户需要DB和Redis.商店需要DB,Config和FTP”……
虽然这对于较小的项目来说是一个开销,但它对于大量且经过充分测试的项目有很大帮助.
如果您曾经升级到多个DB(例如一个主服务器和多个服务器),DI非常适合,因为您可以为代码的每个部分提供完成工作所需的数据库,而无需更改单行代码.
内容总结
以上是互联网集市为您收集整理的php – MVC,模型和数据访问对象全部内容,希望文章能够帮你解决php – MVC,模型和数据访问对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。