PHP загружает новые модели в цикле - PullRequest
1 голос
/ 19 февраля 2010

В настоящее время я борюсь с этим сообщением об ошибке, реорганизовав часть своего кода:

Неустранимая ошибка: допустимый объем памяти 33554432 байта исчерпан

Полагаю, у меня где-то небрежный код. Это плохая практика загружать новые модели в цикле, например так:

<?php 
foreach($blog_ids as $blog_id) { 
    $blog = new Blog($blog_id);
    echo $blog->title;
}
?>

Это быстрый способ сжечь память .... и если да, то как мне достичь той же цели?

EDIT:

  1. приведенный выше код является просто фрагментом. У меня есть тонны информации для каждого блога - модель, скорее всего, должна быть лучшим способом справиться с этим.

  2. У меня может быть до 100 различных записей в блогах на странице.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Ваша переменная $ blog используется повторно каждый раз, поэтому сборщик мусора PHP должен освободить память предыдущего экземпляра Blog. Проверьте memory_get_usage () внутри цикла, чтобы убедиться, что это не так.

1 голос
/ 19 февраля 2010

У меня также была эта проблема с моими моделями, где мне нужно было создать множество их экземпляров, чтобы получить одну или две информации для каждой записи.

Мое решение состояло в том, чтобы создать класс Collection, что-то вроде этого:

class BlogCollection
{
    public function getTitles()
    {
        // select and returns just the titles of blogs
    }
}

Таким образом, вы получаете централизованную информацию, которая вам нужна, и вам не нужно загружать полные модели, чтобы получить одну или две информации.

0 голосов
/ 19 февраля 2010

Я не знаю, что происходит в конструкторе Blog, но я полагаю, что вы заполняете свой объект информацией из базы данных.

Помимо получения большего количества информации, чем вам нужно (если вам нужен только заголовок ...), вы, возможно, также совершаете много поездок в базу данных, если у вас может быть до 100 записей, которые вам нужно отобразить.

Что я хотел бы сделать, это создать статическую функцию, которая получает всю коллекцию заголовков (и все, что вам нужно) сразу и сохраняет их в массиве для последующего отображения.

...