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

时间:2015-08-31 14:10:08

标签: php codeigniter abstract-class extends codeigniter-base-model

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

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

现在,所有控制器都可以在不使用'required'的情况下扩展'Incyte_Controller'。

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

  

致命错误:无法实例化抽象类Incyte_Model   第172行/opt/lampp/htdocs/incyte/system/core/Common.php

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

我检查了拼写错误,包括大写字母,但没有找到。

另外,我必须提到两个基类都是抽象类,因为它们不应该自己运行(我的老师很可能更喜欢这样)

请理解我知道抽象类本身无法实例化,但扩展抽象类的类可以实例化,这就是我想要做的。但它似乎在一种情况下不起作用,而它在另一种非常相似的情况下起作用,这很奇怪。

我希望你们中的任何人都可以提供帮助

2 个答案:

答案 0 :(得分:0)

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

new Incyte_Model();

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

了解PHP如何处理Object Oriented (OO) code

请特别注意class abstractions

答案 1 :(得分:0)

更好的方法是将核心模型类扩展为MY_Incyte_Model,然后在实际模型中扩展它。

因此,您可以class AwesomeModel extends CI_Model代替class AwesomeModel extends MY_Incyte_Model

在这里阅读更多内容

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