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

}

然后,我需要以某种方式获得子模型来扩展我的模型,这样我就可以做一些类似于$this->;我的模型->;测试()。子模型扩展的不一定是mymodel,它可以是任何模型。有什么想法吗?

谢谢你抽出时间。

最佳回答

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

继承只向一个方向流动,向下。

如果Myodel扩展子模型您的$this->;我的模型->;test()会起作用,但它没有意义,因为假设子(子)对象从父对象继承,而不是相反。

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

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

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

我认为可以实现这一点的一种方法是创建重影函数,这些函数只需加载正确的模型并调用该模型函数(尽管我不建议这样做,因为它可能会让调试变得非常混乱。

按照你的例子

<?php

class Mymodel extends Model
{

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

}

子模型

<?php

class 子模型 extends Model
{

    function test() { do something.. }

}

但同样,如果你想要干净的代码,这不是一条路,试着观察继承,并在设计数据时考虑到这一点

问题回答

您可以创建可以扩展代码点火器模型的实用新型,然后您的所有模型都可以扩展该实用新型。你要添加到实用新型中的方法将可用于它的所有子类,也就是你的模型。

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





相关问题
Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

JSON with classes?

Is there a standardized way to store classes in JSON, and then converting them back into classes again from a string? For example, I might have an array of objects of type Questions. I d like to ...

Object-Oriented Perl constructor syntax and named parameters

I m a little confused about what is going on in Perl constructors. I found these two examples perldoc perlbot. package Foo; #In Perl, the constructor is just a subroutine called new. sub new { #I ...

Passing another class amongst instances

I was wondering what is the best practice re. passing (another class) amongst two instances of the same class (lets call this Primary ). So, essentially in the constructor for the first, i can ...

Where can I find object-oriented Perl tutorials? [closed]

A Google search yields a number of results - but which ones are the best? The Perl site appears to contain two - perlboot and perltoot. I m reading these now, but what else is out there? Note: I ve ...

热门标签