所以我认为打印对象列表的常用方法是使用一些Collection Class或者返回要列出的对象的id的东西,然后为每个id启动一个对象,然后列出它们。
这真的是最好的方法吗? 这意味着在后台执行一次数据库查询以获取ID,然后在启动时执行每个对象的其他数据库查询。
当然,使用小型列表时没问题。但是在大型列表中,这意味着DB负载很重,没有?
有更好的方法吗?
(我希望这不是一个愚蠢的问题......对OOP而言是新的;)
编辑:
好的,很抱歉,如果这还不够清楚的话。 (也许是因为我接近这一切都错了) 我们说我的桌子上有我所有的产品。现在我想列出它们......但是在将产品属性输出到列表之前我需要进行一些数据转换。此数据转换(通常)由产品对象处理。
愚蠢的例子:
$product->replaceBadWordsInDescription();
现在,为了能够在我的列表中使用这些功能,我需要为列表中的每个产品都有一个产品对象实例,对吗?
我认为flyweight模式可能是一种方式。我会读到它。
2ND编辑:
我试图将我的问题简化为具体问题。 (使用列表示例)但通常,在处理同一类的许多对象时,最佳做法是启动每个对象并使用它的构造函数(或工厂)来填充它的属性。 DB,或者有更好的方法吗?
让一个查询为我们想要创建的所有对象重新调整所有属性,然后将它们传递给对象启动会不会减少资源消耗? (如果我理解正确,这就是flyweight模式的想法)
答案 0 :(得分:2)
不要将此视为答案,不仅仅是提示要考虑的内容
如果您只想打印数据列表,为什么要使用对象?
你的ObjectsClass方法准备数据还是getter / setter?
主题:https://en.wikipedia.org/wiki/Flyweight_pattern
为什么先拉出一个id列表,然后从DB中提取每个id数据?
主题:http://php.net/manual/de/mysqlinfo.concepts.buffering.php
在PHP中你不需要任何动作[比如从DB获取samekind的数据并打印它]对象。
我想要尝试的东西,也可以从无缓冲的 mysql查询中获取数据。
希望有所帮助。
如果没有,你必须详细解释你真正想做的事情!
编辑:
此数据转换(通常)由产品对象处理。 愚蠢的例子:\ $ product-> replaceBadWordsInDescription(); 现在,为了能够在我的列表中使用这些功能,我需要为列表中的每个产品提供>产品对象实例,对吗?
实际上,您可以创建一个进行转换的Object。并将数据库中的获取数据提供给该对象方法,如:
$prepared_row = $productTransformator->replaceBadWordsInDescription($fetched_row);
返回的 prepared_row 可以是没有方法的flyweight对象实例!
为什么,如果您的产品对象有很多方法,那么您将拥有大量的内存使用和流程来创建一个重对象实例的foreach行。
所以制作两个班级:
一个准备给定数据(Transformator Instance)和一个只保存数据(Flyweight Instance)而没有任何方法的数据。
但我只是将数据处理为数组,并在此处使用对象,转换器实例。
希望给出方向:)
并保持简单和正确: flyweight 在我的示例中,这意味着实例中没有方法。