错还是对? While 循环

Posted

技术标签:

【中文标题】错还是对? While 循环【英文标题】:Wrong or Right ? While loops 【发布时间】:2011-04-02 08:33:13 【问题描述】:

嘿,伙计们,现在我以前从未使用过这种方法,我只是尝试了一下,看看它是否有效,它就像做梦一样。

通常人们倾向于这样做。

$tags = array();
while($row = $statement->FetchObject())

     $tags[] = $row;

但是如果我这样做会更快还是代码更少。

$tags = array();
while($tags[] = $statement->FetchObject())

只是好奇而已


更新:

我确实理解 Cleaner 代码比 Less 代码要好得多,但因为我之前从未使用过这种方法,这只是对利弊的好奇。

【问题讨论】:

根本不应该这样。但只是 $tags = $db->getArr(); 在 getArr 方法内部 - 是的。但不在您的主代码中。 【参考方案1】:

一般问题是要退出while 循环,需要返回“false”结果。在您的第二个示例中,这意味着您的数组末尾会有一个“假”值(这可能不是您想要的)。

这对于传统方法来说不是问题,因为“false”值被赋予$row,并且从未应用于数组。

至于性能或可读性,它们不是问题,因为代码并没有按照您的意愿执行。

【讨论】:

【参考方案2】:

如果您的数据库类允许,只需为此目的使用预定义的方法。例如 PDO 有 fetchAll: $statement->fetchAll(PDO::FETCH_OBJ)

【讨论】:

这个+500。本来打算发表相同观点的评论 不是 +500 大声笑,我知道 FetchAll 但我没有在这里使用它的原因是因为我已经删除了循环中的更多代码,例如 $row->tags = $this->getTagsForPost($row->feed_id); 用于多对-许多查询。 @Robert 看起来你没有使用 SQL。无论如何,没有理由在获取数据循环中做任何事情。如果你想遍历这些数据 - 获取一个数组并对其进行迭代。 @Robert 哦,不,你这个小骗子! :) 那么第一种方法就没有用了。 我认为问题更多在于技术,而不是代码在做什么。在其他时候(不仅仅是糟糕的数据库交互)可以使用这种“风格”。【参考方案3】:

我发现前者更具可读性和易于掌握,而且我确信两者之间的任何性能差异都可以忽略不计。

我完全赞成 1)。

【讨论】:

【参考方案4】:

你甚至可以跳过括号:

$tags = array();
while ($tags[] = $stmt->fetchObject());

那段代码肯定是有点短,它是更冗长的形式:

$tags = array();
while ($tag = $stmt->fetchObject()) 
    $tags[] = $tag;

但是哪一个更容易阅读?你可以说两者都很明显,实际上我会同意你的看法。但是在一般维护中哪一个更容易?要以较短的形式添加像$tag->doSth(); 这样的新语句,您必须完全重写它。在最后一个中,您只需添加该语句。

【讨论】:

【参考方案5】:

当然,只要FetchObject() 每次调用时都适当地更改其返回值;)

【讨论】:

以上是关于错还是对? While 循环的主要内容,如果未能解决你的问题,请参考以下文章

python的while循环

测试循环在顶部还是底部? (while vs. do while)[关闭]

while循环

Java

0.999的循环是小于1还是等于1

javascript中,while循环与for循环执行效率上的差异?