【问题标题】:CodeIgniter cannot instantiate a model extending abstract base modelCodeIgniter 无法实例化扩展抽象基础模型的模型
【发布时间】:2015-11-25 14:36:57
【问题描述】:

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

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

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

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

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

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

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

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

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

希望大家帮忙

【问题讨论】:

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


    【解决方案1】:

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

    因此,您可以使用class AwesomeModel extends MY_Incyte_Model,而不是class AwesomeModel extends CI_Model

    在这里阅读更多

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

    【讨论】:

    • 成功了。我认为通过将 Config 中的“MY_”前缀更改为“Incyte_”,CI 会将文件识别为基类。一个网站是这么说的,而且它似乎适用于控制器。显然,它不起作用。非常感谢
    【解决方案2】:

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

    new Incyte_Model();

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

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

    尤其是class abstractions

    【讨论】:

    • 我知道抽象类不能被实例化。但这引出了一个问题,为什么控制器扩展“Incyte_Controller”,这也是抽象的,而当模型尝试扩展“Incyte_Model”时却失败了?
    • 通过扩展抽象类,他们创建了一个具体的类,可以被实例化。在这种情况下,扩展 Incyte_Model 的类可以正常工作,但不允许直接使用 Incyte_Model
    • 当您通过 include 加载文件时,您可以“破解它”,而不是“$this->load->”
    • @samlev 我知道直接使用 Incyte_Model 是不允许的,但这不是我正在做的。我尝试使模型 EXTEND Incyte_Model,然后实例化模型。请注意,我处理 Incyte_Model 的方式与 Incyte_Controller 完全相同,但出于某种原因它确实有效。如果这适用于 Incyte_Controller,那么它是否也适用于其他基类
    • 将代码发布到/opt/lampp/htdocs/incyte/system/core/Common.php 第172 行附近。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多