我正在为我的项目使用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')。我不知道它是否有效。
提前感谢。
答案 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';
}
}
?>