CodeIgniter 无法实例化扩展抽象基础模型的模型

CodeIgniter cannot instantiate a model extending abstract base model

我正在尝试在 CodeIgniter 中创建一个应用程序,其中每个控制器都扩展了一个名为 'Incyte_Controller.php' 的基本控制器,并且每个模型都扩展了一个名为 'Incyte_Model.php'.

的基本模型

我曾经使用 'require' 在每个子 class 中导入这些父 classes,但我想更改它,因为它对我来说太多余了。 所以我将基本文件移动到 'application/core' 并将 Config.php 中的基本 class 前缀从 'MY_' 更改为 'Incyte_'.

现在,所有控制器都可以扩展 'Incyte_Controller' 而无需使用 'required'。

但是,奇怪的是,当应用程序尝试加载 model 时,它说:

Fatal error: Cannot instantiate abstract class Incyte_Model in /opt/lampp/htdocs/incyte/system/core/Common.php on line 172

即使我尝试以与扩展基本控制器完全相同的方式扩展基本模型,也会发生这种情况。

我检查了拼写错误,包括大写字母,但发现 none。

此外,我必须提到两个基础 classes 都是抽象的 classes,因为它们不应该对自己进行操作(我的老师很可能更喜欢那样)

请理解我知道抽象 classes 本身不能被实例化,但是扩展抽象 classes 的 classes 可以被实例化,这就是我正在尝试的做。但是它似乎在一种情况下不起作用,而在另一种非常相似的情况下却起作用,这很奇怪。

希望大家能帮上忙

转到/opt/lampp/htdocs/incyte/system/core/Common.php,你会发现一行试图做这样的事情:

new Incyte_Model();

Incyte_Model class 是抽象的(这意味着它不能直接使用 - 它必须被子 classed)。

查看 PHP 如何处理 Object Oriented (OO) code

具体请看class abstractions

更好的方法是将核心模型 class 扩展到 MY_Incyte_Model 之类的东西,然后在您的实际模型中扩展它。

所以您可以 class AwesomeModel extends MY_Incyte_Model.

而不是 class AwesomeModel extends CI_Model

在此处阅读更多内容

https://ellislab.com/codeigniter/user-guide/general/core_classes.html