此时我想构建一个MVC框架。一切都很好,但现在我在控制器和模型之间出现了问题
关于我的问题的例子
Model.php
class Model{
public function __construct(){
include('libraries/mysql.php');
new mysql();
}
}
和mysql库中我有一个自然的mysql方法,如select, insert,…现在我想使用mysql类在我的users_models通过扩展从模型
我的user_model类
class user_model extends Model{
public function get_user(){
$this->mysql->select();
}
}
哦…从哪里开始。
让我们从模型开始。在MVC中,模型不是一个类,而是一个应用层。它应该由域对象组成,它们负责业务逻辑。负责与存储交互的对象,通常是- DataMappers。
下. .嗯. .你知道除了MySQL之外还有其他(实际上更好的)数据库吗?您似乎创建了一些mysql对象包装器。重点是什么?特别是当php有PDO时。
关于连接。控制器应该能够访问创建"模型"的工厂类。数据库连接已注入对象
你不希望在每个实例中都包含你的lib。(如果它真的是一个库)就一次。
require_once('libraries/mysql.php');
class Model{
protected $_mysql;
public function __construct(){
$this->_mysql = new mysql();
}
}
class user_model extends Model {
public function foo() {
$this->_mysql->select();
}
}
如果你想像JohnP建议的那样使用依赖注入,你将需要更多的代码。(未经测试,但应该概述的方式(是的,我知道真正的DI工作方式不同))
interface my_db {
public function select();
public function insert();
}
class mysql implements my_db {
public function select() {
// select code
}
public function insert() {
// insert code
}
}
class Model{
protected $_db;
public function __construct(my_db $DB){
$this->_db = $DB;
}
}
class user_Model extends Model {
public function foo(){
$this->_db->select();
}
}
$model = new Model(new mysql());
试试这个:
class Model{
protected $mysql;
public function __construct(){
include_once('libraries/mysql.php');
$this->mysql = new mysql();
}
}