如何从CodeIgniter中的另一个模型继承模型

时间:2011-07-04 08:56:06

标签: codeigniter inheritance model extends

我正在为我的项目使用codeigniter,我有这个类模型,我称之为Genesis,如下所示:

class Genesis_model extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get() {
        return 'human soul';
    }
}

我有另一个模型,存储在同一目录中,扩展了Genesis_model

class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return $this->get();
    }
}

Human_model由Human controller

使用
class Human extends CI_Controller {     
    function __construct(){
        parent::__construct();
        $this->load->model('human_model');
    }       

    function get_human() {
        $data['human'] = $this->human_model->get_human();
        $this->load->view('human/human_interface', $data);
    }
}

如果我执行代码,它将产生一个错误,指向返回$ this-> get()。它显示“致命错误:在第2行的...... \ application \ models \ human_model.php中找不到类'Genesis_model'”。

我使用这种方法,因为我的几乎所有模型都共享几乎相同的结构。我在Genesis中收集了类似的功能,而其他模型仅作为它们所代表的表所特有的数据供应商。它在我的asp.net(vb.net)中运行良好,但我不知道如何在codeigniter中执行此操作。

Human_model是否有一种方法可以继承Genesis_model。我认为我不允许使用 include('genesis_model.php')。我不知道它是否有效。

提前感谢。

5 个答案:

答案 0 :(得分:7)

将文件genesis_model.php放入核心目录

答案 1 :(得分:6)

core / MY_Model是好的,如果你的模型只有一个重要的超类。

如果您想从超过模型的超类继承,更好的选择是更改自动加载配置。

在application / config / autoload.php中,添加以下行:

    $autoload['model'] = array('genesis_model');

答案 2 :(得分:4)

将您的Human_model更改为:

include('genesis_model.php');
class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return parent::get();
    }
}

注意get_human函数和include

答案 3 :(得分:1)

您必须在Human_model.php中包含Genesis_model,如下所示:

include_once( APPPATH . 'folder/file' . EXT );

或者您可以在config / autoload.php文件中自动加载它,我认为这是愚蠢的=)

答案 4 :(得分:1)

其他解决方案

<?php
$obj = &get_instance();
$obj->load->model('parentModel');
class childModel extends parentModel{
    public function __construct(){
        parent::__construct();
    }

    public function get(){
        return 'child';
    }
}
?>