我在CI中建立模型,以便在需要某些功能时加载“子”模型。为了使我的代码尽可能易于访问和清理,我希望这些子模型扩展它们被调用的模型。
所以,如果我有两个模型:
<?php
class Mymodel extends Model
{
}
和
<?php
class Submodel extends Model
{
function test() { do something.. }
}
然后我需要以某种方式让子模型扩展mymodel,以便我可以做$this->mymodel->test()
之类的事情。它不一定是子模型扩展的mymodel,它可以是任何模型。有任何想法吗?
感谢您的时间。
答案 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之间的类没有任何关系。