2011-02-10 52 views
0

我在CI中建立的模型,使它們在需要某些功能時加載「子」模型。爲了保持我的代碼儘可能可訪問和乾淨,我希望這些子模型擴展它們被調用的模型。是否可以在Codeigniter中動態擴展模型?

所以,如果我有兩個型號:

<?php 

class Mymodel extends Model 
{ 



} 

和:

<?php 

class Submodel extends Model 
{ 

    function test() { do something.. } 

} 

然後,我需要,不知何故,能夠得到子模型擴展爲MyModel,這樣我可以這樣做$this->mymodel->test()。它不一定是子模型擴展的mymodel,它可以是任何模型。有任何想法嗎?

謝謝你的時間。

回答

2

你對類之間的繼承理解不正確。

繼承只能單向流動,向下。

if Myodel extends Submodel你的$this->mymodel->test()可以工作,但它沒有任何意義,因爲子(子)對象假設從父對象繼承,而不是相反。

作爲一個比喻,你不會看着一個孩子,並告訴父母「你看起來就像你的孩子」,因爲它是孩子是父母的一部分表示。

你需要從字面上看這個詞extends,你實際上是在'擴展'父母的功能。

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

我相信你可以做到這一點

一種方法是創建鬼功能,簡單地加載正確的模型,並調用模型功能(雖然我不建議這樣做,因爲它可以得到進行調試非常混亂。

按你的例子​​

<?php 

class Mymodel extends Model 
{ 

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

} 

子模型

<?php 

class Submodel extends Model 
{ 

    function test() { do something.. } 

} 

但是,如果您打算使用乾淨的代碼,那麼這不是要走的路,嘗試和遵守繼承,並根據這一點設計您的數據。

0

您可以創建可能擴展codeigniter模型的實用新型,然後您的所有模型都可以擴展該實用新型。您要添加到實用模型中的方法將適用於所有它的子類,也就是您的模型。

如何調用你的類沒有或沒有從其他類繼承的方法?看看你的代碼,MyModel和Submodel之間的類沒有關係。