почему расширение PDO вызывает переполнение памяти? - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть класс, который расширяет класс 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();
}

почему это?

1 Ответ

6 голосов
/ 22 сентября 2010

Ответ прост. Ваш код неверен. Это делает бесконечную рекурсию.

Когда вы вызываете $this->commit(), вы вызываете тот же самый метод. Так что он будет просто зацикливаться до тех пор, пока вы не исчерпаете память или не переполните стек (нажмите на StackOverflow, хехехе)

Вместо этого измените функцию так, чтобы она вызывала метод commit() родительского класса (в данном случае это PDO::commit()):

function commit() {
    return parent::commit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...