PHP在循环中加载新模型

PHP在循环中加载新模型,php,refactoring,Php,Refactoring,我目前正在通过重构我的一些代码来处理此错误消息: 致命错误:已耗尽33554432字节的允许内存大小 我想我一定是在某个地方写了些乱七八糟的代码。在这样的循环中加载新模型是否是一种不好的做法: <?php foreach($blog_ids as $blog_id) { $blog = new Blog($blog_id); echo $blog->title; } ?> 这是一种快速消耗内存的方法吗?如果是,我如何实现同样的目标 编辑: 上面的代码只

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

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

我想我一定是在某个地方写了些乱七八糟的代码。在这样的循环中加载新模型是否是一种不好的做法:

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

这是一种快速消耗内存的方法吗?如果是,我如何实现同样的目标

编辑:

  • 上面的代码只是一个片段。我对每个博客都有大量的信息——一个模型应该是最好的处理方式

  • 我可能在一个页面上有多达100个不同的博客列表


  • 您的$blog变量每次都被重用,因此PHP的垃圾收集器应该为您释放上一个blog实例的内存。检查循环内部,看看是否没有。我的模型也有这个问题,我需要实例化很多模型,以便每个记录获得一到两个信息

    我的解决方案是创建一个
    集合
    类,如下所示:

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

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

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

    除了获得比您需要的更多的信息(如果您只需要标题…),如果您需要显示多达100个条目,您可能还需要多次访问数据库


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

    每个博客对象有多大?在它崩溃之前,您得到了多少次迭代?可能有一种更有效的方法可以在不加载每个博客对象的情况下获取博客标题。需要更多的代码来调试并提供任何输入。我看不出这个代码有任何明显的错误。谢谢你的提问-我在上面加了一个问题-你在这个页面上还做了什么?这可能是您刚好超过32mb限制的地方-问题可能很容易出现在代码的其他地方。提供的代码片段是重现此内存错误所需的最小代码?可能是其他原因导致了这个问题。前一个问题不会从内存中释放出来,否则他无法打印博客标题。我认为每次完成工作后,他都应该手动调用循环中的_析构函数。如果前一个被释放,为什么他不能打印当前一个的博客标题?