【问题标题】:Wrong or Right ? While loops错还是对? While 循环
【发布时间】: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 方法内部 - 是的。但不在您的主代码中。

标签: php arrays while-loop


【解决方案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() 每次调用时都适当地更改其返回值;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-12
          • 2013-08-10
          • 1970-01-01
          • 2016-08-13
          • 2010-09-18
          • 2016-04-24
          相关资源
          最近更新 更多