2012-05-16 76 views
1

我正在通過完全替換它來修改模型類。我也想破壞不同類中的大部分組件,並在需要時加載。這個特定的類必須在構造函數中加載。我班的一個簡單的模型如下:PHP類擴展超過內存 - CodeIgniter

Model.php

class CI_Model { 
    function __construct(){ 
     load_class('Model_validations', 'core'); 
    } 
} 

Model_validations.php

class CI_Model_validations extends CI_Model { 
    private $validations = array(); 
    public function validates($field){ 
    } 
} 

我從下面的程序得到是這樣的:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261904 bytes) in /xampp/htdocs/cms/system/core/Controller.php on line 233

另外我試圖刪除extends CI_Model,它工作得很好。 我們也可以說,加載後立即調用CI_Model_validations::validate()方法,但它是空的,我不明白這是如何導致問題的。

任何想法? 在此先感謝。

+0

它看起來像你已經改變了一些東西,導致CI被投入循環。我不知道CI的來龍去脈,但我的猜測是你省略了班級的必要部分。 –

回答

1

這是因爲CI_Model試圖加載CI_Model_validations,它試圖再次加載CI_Model,因爲它繼承它。並CI_Model嘗試再次加載CI_Model_validations等等......

更新:我的上述假設似乎從this answer錯誤。它說load_class是一個單例加載器。

+0

我相信你的解釋是正確的。完全是因爲它是一個單身加載器。我實際上需要不止一個類的實例,所以它可以正確工作,這就產生了悖論。謝謝。 –