我有一个扩展PDO类的类。它叫做数据库。但在特定的函数commit()函数中,它会出现内存溢出错误。
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();
}
为什么会这样?
答案 0 :(得分:6)
答案很简单。你的代码错了。它正在进行无限递归。
当你致电$this->commit()
时,你正在调用同样的方法。所以它将永远循环,直到你的内存耗尽,或者你溢出堆栈(点击StackOverflow,hehehe)。
相反,更改函数以调用父类的commit()
方法(在本例中为PDO::commit()
):
function commit() {
return parent::commit();
}