代码之家  ›  专栏  ›  技术社区  ›  Robert den Blaauwen

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

  •  1
  • Robert den Blaauwen  · 技术社区  · 9 年前

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

    我曾经使用“require”在每个子类中导入这些父类,但我想改变这一点,因为这对我来说太多余了。 因此,我将基本文件移动到“application/core”,并更改了Config中的基类前缀。php从“MY_”转换为“Incyte_”。

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

    但奇怪的是,当应用程序试图加载 模型 上面写着:

    严重错误:无法在中实例化抽象类Incyte_Model /opt/lampp/htdocs/incyte/system/core/Common。php第172行

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

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

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

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

    我希望你们能帮忙

    2 回复  |  直到 9 年前
        1
  •  0
  •   Pritoj    9 年前

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

    所以不是 class AwesomeModel extends CI_Model 你可以有 class AwesomeModel extends MY_Incyte_Model .

    在此处阅读更多信息

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

        2
  •  0
  •   samlev    9 年前

    /opt/lampp/htdocs/incyte/system/core/Common.php 你会发现一条线试图这样做:

    new Incyte_Model();

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

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

    特别是,看看 class abstractions .