繁体   English   中英

是否可以在Codeigniter中动态扩展模型?

[英]Is it possible to dynamically extend a model in Codeigniter?

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

如果我有两个型号:

<?php

class Mymodel extends Model
{



}

和:

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

然后,我需要以某种方式能够使子模型扩展mymodel,以便可以执行类似$this->mymodel->test() 子模型扩展不必是mymodel,也可以是任何模型。 有任何想法吗?

谢谢你的时间。

您对类之间的继承有不正确的理解。

继承仅以单向流动,向下流动。

如果Myodel extends Submodel你的$this->mymodel->test()会起作用,但它没有意义,因为子(子)对象假设从父对象继承,而不是相反。

作为类比,你不会看一个孩子,并告诉父母,“你看起来就像你的孩子”,因为它是孩子,是父母的一部分代表。

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

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

我相信你可以做到这一点的一种方法是创建ghost函数,只需加载正确的模型并调用该模型函数(虽然我不建议这样做,因为它可能会让调试变得非常混乱。

根据你的例子

<?php

class Mymodel extends Model
{

    function test() {
        $this->load->model('submodel');
        $this->submodel->test();
    }

}

子模型

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

但是,如果要使用干净的代码,那不是走的路,尝试观察继承,并牢记这一点来设计数据。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM