[英]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.