错还是对?While 循环

Wrong or Right ? While loops

提问人:RobertPitt 提问时间:8/23/2010 最后编辑:RobertPitt 更新时间:8/23/2010 访问量:227

问:

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

通常人们倾向于这样做。

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

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

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

只是好奇,仅此而已


更新:

我确实知道 Cleaner 代码比 Less 代码好得多,但由于我以前从未使用过这种方法,这只是对利弊的好奇。

PHP 数组 while 循环

评论

0赞 Your Common Sense 8/23/2010
根本不应该这样。但就在 getArr 方法内部 - 是的。但不在您的主代码中。$tags = $db->getArr();

答:

1赞 Pekka 8/23/2010 #1

我发现前者更具可读性和易理解性,并且我相信两者之间的任何性能差异都可以忽略不计。

我完全赞成 1)。

0赞 Luca Matteis 8/23/2010 #2

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

15赞 salathe 8/23/2010 #3

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

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

至于性能或可读性,它们都不是问题,因为代码没有做你想做的事情。

3赞 NikiC 8/23/2010 #4

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

评论

0赞 Your Common Sense 8/23/2010
+500 这个。打算留下同样的观点的评论
0赞 RobertPitt 8/23/2010
不是 +500 哈哈,我知道 FetchAll,但我在这里没有使用它的原因是因为我删除了循环中的更多代码,例如多对多查询。$row->tags = $this->getTagsForPost($row->feed_id);
0赞 Your Common Sense 8/23/2010
@Robert看起来你没有使用 SQL 来做。无论如何,没有理由在获取数据循环中做任何事情。如果要遍历此数据 - 获取一个数组并迭代它。
0赞 Your Common Sense 8/23/2010
@Robert哦,不,你这个小骗子!:)那么第一种方法就没有用了。
0赞 Tim Lytle 8/23/2010
我认为问题更多的是关于技术,而不是代码在做什么。还有其他时候(不仅仅是糟糕的数据库交互),可以使用这种“样式”。
1赞 Crozin 8/23/2010 #5

您甚至可以跳过括号:

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

该代码肯定比它更详细的形式更短一些:

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

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