【问题标题】:Is it possible to dynamically extend a model in Codeigniter?是否可以在 Codeigniter 中动态扩展模型?
【发布时间】:2011-06-25 03:14:24
【问题描述】:

我在 CI 中的模型设置为在需要某些功能时加载“子”模型。为了使我的代码尽可能易于访问和清洁,我希望这些子模型扩展它们被调用的模型。

所以如果我有两个模型:

<?php

class Mymodel extends Model
{



}

还有:

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

然后我需要以某种方式让子模型扩展 mymodel,以便我可以执行类似 $this-&gt;mymodel-&gt;test() 的操作。子模型扩展的不一定是 mymodel,它可以是任何模型。有任何想法吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: php oop model-view-controller codeigniter class-design


    【解决方案1】:

    您对类之间的继承有错误的理解。

    继承只流向一种方式,向下。

    如果Myodel extends Submodel 你的$this-&gt;mymodel-&gt;test() 可以工作,但这没有意义,因为假设子(子)对象是从父对象继承的,而不是相反。

    打个比方,你不会看着孩子告诉父母“你看起来就像你的孩子”,因为孩子是父母的一部分。

    您需要从字面上理解extends 这个词,您实际上是在“扩展”父级的功能。

    ====================

    我相信您可以实现此目的的一种方法是创建幽灵函数,该函数只需加载正确的模型并调用该模型函数(尽管我不建议这样做,因为它可能会使调试变得非常混乱。

    根据你的例子

    <?php
    
    class Mymodel extends Model
    {
    
        function test() {
            $this->load->model('submodel');
            $this->submodel->test();
        }
    
    }
    

    子模型

    <?php
    
    class Submodel extends Model
    {
    
        function test() { do something.. }
    
    }
    

    但是,如果您要使用干净的代码,这不是正确的方法,请尝试观察继承,并在设计数据时牢记这一点。

    【讨论】:

      【解决方案2】:

      您可以创建可以扩展 codeigniter 模型的实用模型,然后您的所有模型都可以扩展该实用模型。您要添加到实用模型的方法将可用于它的所有子类,也就是您的模型。

      您如何调用您的类没有或没有从任何其他类继承的方法?查看您的代码,您的类中 Mymodel 和 Submodel 之间没有关系。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多