Codeigniter MY_Model类

时间:2012-06-04 13:00:19

标签: php oop codeigniter model

我正在尝试编写自己的MY_Model基类,但我遇到了一个奇怪的问题:

/core/MY_Model.php     

    function __construct() {
        if ( !empty($this->table)) {
            // query db, etc.
        }
        else {
            // even though that I set $this->table value 
            // in the child class, I always ended up here
            // it's always empty!!!!
            log_message('error', 'some error message');
        }
        // ...
    }
}

/models/test_model.php     

    function __construct() {
        parent::__construct();
    }

    // ...

}

即使我在子类中设置$ this->表值,我总是最终在MY_Model类中找到$ table value为空,它总是空的!有什么提示吗?!

3 个答案:

答案 0 :(得分:10)

除非你需要特定/特殊的东西 - 你应该只使用Jamie Rumbelows" MY_Model" - 它可能比你能写的任何东西(或我)更好 - 并允许你专注于编写其他代码。无需重新发明轮子。

您可以从GitHub here

获取代码

And here is an awesome tutorial向您展示如何在应用程序中使用MY_Model。

老实说 - 试一试 - 你不会后悔的。

答案 1 :(得分:2)

在模型构造函数中,执行以下操作:

class Test_model extends MY_Model{
   public function __construct()
   {
       parent::__construct();
       $this->table = 'test_model';
    }
    //...
}

答案 2 :(得分:1)

您不应该尝试覆盖子类中的$ table变量。你在做什么:

  • CI_MODEL包含:
    • 受保护的$ table,属于自己的范围。
  • MY_Model包含:
    • 受保护的$ table,属于自己的范围。这会覆盖继承的变量$ table。

当你在子类中覆盖它时,它不会冒泡到父类,因为$ table只会成为子类的一部分。

您需要做的是删除子表中$ table变量的声明:

/models/test_model.php
<?php
class Test_model extends MY_Model {
    function __construct() {
        parent::__construct();
        $this->table = 'test_models';
    }

    // ...

}