4

我正在尝试编写自己的 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->table 值,我总是在 MY_Model 类中发现 $table 值是空的,它总是空的!!!!请问有什么提示吗?!

4

3 回答 3

11

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

你可以在这里从 GitHub获取代码

这是一个很棒的教程,向您展示如何在您的应用程序中使用 MY_Model。

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

于 2012-06-04T16:18:41.800 回答
2

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

class Test_model extends MY_Model{
   public function __construct()
   {
       parent::__construct();
       $this->table = 'test_model';
    }
    //...
}
于 2012-07-09T16:28:23.583 回答
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';
    }

    // ...

}
于 2012-09-26T07:33:35.027 回答