如何构建一个带有库和帮助器的php mvc我正在寻找想法

时间:2011-12-13 11:55:03

标签: php model-view-controller frameworks

此时我想构建一个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();
      }
}

结果错误找不到选择方法...

3 个答案:

答案 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();
       }
    }