【发布时间】:2012-12-17 08:18:44
【问题描述】:
这个问题类似于Mysql results in PHP - arrays or objects? 但是,我的问题扩展了那里讨论的内容。
我正在尝试确定哪种格式更适合处理数据库结果:对象或数组。我不关心性能(据我所知,这没什么区别)。我的重点还在于显示结果,而不是创建、更新或删除结果。
迄今为止,我一直通过 mysqli_fetch_object 或 PDO 的 fetchObject 等函数使用对象。这通常工作得很好,直到我开始做连接。连接会导致奇怪的对象,这些对象是来自两个或多个表的字段的混合。我的代码很快开始变得混乱。
我应该注意,我正在分配特定的类名,而不是坚持使用默认的 stdClass。我这样做是为了可以访问我在类中创建的任何辅助方法。例如:
foreach ($members as $member)
{
echo $member->full_name();
echo $member->age();
}
为了清楚起见,我正在考虑将所有数据库结果转移到数组中。从我读到的其他人也这样做。但是,这让我无法轻松访问我的辅助方法。
使用上面的例子,我想我可以只输出名字和姓氏,而不是使用full_name() 方法,没什么大不了的。至于age() 方法,我想我可以创建一个通用的实用程序类并将其放入其中。
我的问题:
- 如果使用(模型)对象,如何处理连接?
- 如果使用数组,如何处理辅助方法?
【问题讨论】:
-
这是个人喜好问题,但我更喜欢在处理来自数据库的数据时处理数组,然后在需要时使用该数据创建对象。我宁愿使用我定义的方法创建对象,也不愿使用 DB 扩展附带的方法。
-
为什么不两者兼而有之?
$sth->fetch(PDO::FETCH_LAZY);然后是最适合您正在编写的代码的访问器。 -
@DudeSolutions 这种方法很有意义。那么,你是说如果你想访问你的帮助方法之一,你会在那个时候创建实际的对象吗?看起来像是额外的工作,但我可以看到在数据库结果和真实对象之间创建了一个很好的区别。
-
@Jonathan 如果您需要将数据作为对象才能访问您的辅助方法,那么可以。实际上,这基本上是框架试图解决的众多问题之一的核心——我应该何时何地访问 X 辅助方法。没有正确的答案,只要它有效且可维护。
-
@Sammitch 不错的主意!