加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Codeigniter抽象基础模型

发布时间:2020-12-13 17:19:59 所属栏目:PHP教程 来源:网络整理
导读:是否可以在Codeigniter中实现抽象基础模型?我创建了一个具有基本CRUD功能的抽象类,但我收到了“无法实例化抽象类”错误. 抽象模型位于/application/core/my_model.php中并且很简单 abstract class MY_Model extends CI_Model{ “无法实例化抽象类”是在/sys
是否可以在Codeigniter中实现抽象基础模型?我创建了一个具有基本CRUD功能的抽象类,但我收到了“无法实例化抽象类”错误.

抽象模型位于/application/core/my_model.php中并且很简单

abstract class MY_Model extends CI_Model
{

“无法实例化抽象类”是在/system/core/Common.php的第174行

看起来Codeigniter在加载时试图实例化my_model.php,我猜测这是因为/ core文件夹中的文件被用作扩展核心系统文件(如Controller和Model)的地方.有没有办法阻止这个?我试图使用Phil Sturgeon’s native autoload自动加载模型,但它没有帮助.

/*
| -------------------------------------------------------------------
|  Native Auto-load
| -------------------------------------------------------------------
| 
| Nothing to do with cnfig/autoload.php,this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/

function __autoload($class)
{
    if(strpos($class,'CI_') !== 0)
    {
        @include_once( APPPATH . 'core/'. $class . EXT );
    }
}

我意识到一个简单的方法就是将文件包含在我想要使用的每个模型的顶部,但显然这不是最佳的.

解决方法

为什么要让MY_Model抽象化?您可以将所有CRUD函数放入MY_Model中,并从MY_Model而不是CI_Model扩展模型.无需使用自动加载,因为CodeIgniter允许您使用MY_Model扩展CI_Model,只要您放入核心文件夹即可.

一个好的MY_Model例子来自Jamie Rumbelow.你在这里找到它:https://github.com/jamierumbelow/codeigniter-base-model/

祝好运!

干杯

巴特

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读