此时我想构建一个MVC框架。一切都很顺利但现在我在控制器和模型之间遇到了问题
例外我的问题
Model.php
class Model{
public function __construct(){
include('libraries/mysql.php');
new mysql();
}
}
在mysql库中我有一个自然的mysql方法,如select,insert,... 现在我想通过从Model
扩展来使用我的users_models中的mysql类我的user_model类
class user_model extends Model{
public function get_user(){
$this->mysql->select();
}
}
结果错误找不到选择方法...
答案 0 :(得分:2)
哦......从哪里开始。
让我们从模型开始。在MVC中,Model不是类,而是应用程序层。它应该由域对象组成,它们负责业务逻辑。负责与存储交互的对象通常是 - DataMappers 。
接下来......好吧..你知道除了MySQL之外还有其他(实际上更好的)数据库吗?你似乎创建了一些mysql对象包装器。有什么意义?特别是当php有PDO时。
至于连接。控制器应该可以访问工厂类,从而创建“模型”。已经在对象中注入了数据库连接。
答案 1 :(得分:1)
您不希望在每个实例中包含您的lib。 (如果它真的是一个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());
答案 2 :(得分:0)
试试这个:
class Model{
protected $mysql;
public function __construct(){
include_once('libraries/mysql.php');
$this->mysql = new mysql();
}
}