2010-09-22 58 views
0

我有一個擴展PDO類的類。它被稱爲數據庫。但是在一個特定的函數commit()函數中,它會得到一個內存溢出錯誤。爲什麼擴展PDO會導致內存溢出?

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in C:\wamp\www\igadgets\application\includes\base\classes\database.php on line 130 

的功能是:

function commit() { 
    return $this->commit(); 
} 

好奇的是:當我改變我的課不延伸PDO了,但只包含它的變量,錯誤消失。

這工作得很好:

function commit() { 
    return $this->pdo->commit(); 
} 

這是爲什麼?

回答

6

答案很簡單。你的代碼是錯誤的。它正在做無限遞歸。

當你打電話給$this->commit()時,你就是在調用這個方法。所以它會一直循環,直到內存不足,或者你溢出棧(命中StackOverflow,hehehe)。

相反,改變函數來調用父類的方法commit()(在這種情況下是:PDO::commit()):

function commit() { 
    return parent::commit(); 
} 
+0

哇!甚至沒有注意到!謝謝^^ – 2010-09-22 15:39:25

+0

簡潔明瞭。 「你的代碼錯了。」 – webbiedave 2010-09-22 15:43:17

相關問題