PHP在循环中加载新模型

时间:2010-02-18 22:01:20

标签: php refactoring

我目前正在通过重构我的一些代码来对抗此错误消息:

  

致命错误:允许的内存大小为33554432字节耗尽

我想我必须在某个地方有一些草率的代码。在这样的循环中加载新模型是不好的做法:

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

这是一种燃烧记忆的快捷方式......如果是,我该如何实现同样的目标呢?

编辑:

  1. 上面的代码只是一个片段。我每篇博客都有大量的信息 - 模型最有可能是处理它的最佳方式。

  2. 我可能在一个页面上最多有100个不同的博客列表。

3 个答案:

答案 0 :(得分:2)

每次都会重复使用您的$ blog变量,因此PHP的垃圾收集器应该为您释放以前的Blog实例的内存。检查循环内部的memory_get_usage()以查看它是否没有。

答案 1 :(得分:1)

我的模型也遇到了这个问题,我需要在其中实例化大量信息,以便每条记录获得一个或两个信息。

我的解决方案是创建一个Collection类,其中包括:

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

通过这种方式,您可以集中获取所需信息,而无需加载完整模型以获取一个或两个信息。

答案 2 :(得分:0)

我不知道Blog的构造函数中发生了什么,但我想你正在用数据库中的信息填充你的对象。

除了获取超出您需要的信息(如果您只需要标题......),如果您最多可以显示100个需要显示的条目,那么您可能还会进行大量的数据库访问。 / p>

我要做的是创建一个静态函数,一次性获取整个标题集合(以及您需要的任何其他内容)并将其存储在数组中以便以后显示。