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

时间:2011-02-10 20:21:55

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

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

所以,如果我有两个模型:

<?php

class Mymodel extends Model
{



}

<?php

class Submodel extends Model
{

    function test() { do something.. }

}

然后我需要以某种方式让子模型扩展mymodel,以便我可以做$this->mymodel->test()之类的事情。它不一定是子模型扩展的mymodel,它可以是任何模型。有任何想法吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

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

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

如果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.. }

}

但是,再次,如果你想要干净的代码,这不是可行的方法,尝试观察继承,并设计你的数据。

答案 1 :(得分:0)

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

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