Heya家伙,我以前从来没有做过这种方法,我只是试着看看它是否会起作用,它就像一场梦一样。
通常人们倾向于这样做。
$tags = array();
while($row = $statement->FetchObject())
{
$tags[] = $row;
}
但如果我这样做的话会更快或更少代码。
$tags = array();
while($tags[] = $statement->FetchObject()){}
只是好奇,这都是
更新
我确实理解Cleaner代码比Less代码要好得多,但因为我之前从未使用过这种方法,只是好奇只是为了利弊。
答案 0 :(得分:15)
一般问题是,要退出while
循环,需要返回“false”结果。在你的第二个例子中,这意味着在数组末尾会有一个“假”值(可能不是你想要的)。
这不是传统方法的问题,因为{false}赋予$row
并且永远不会应用于数组。
至于性能或可读性,它们不是问题,因为代码没有按照你想要的那样做。
答案 1 :(得分:3)
如果您是数据库类允许它,只需使用预定义的方法来实现此目的。例如,PDO有fetchAll
:$statement->fetchAll(PDO::FETCH_OBJ)
。
答案 2 :(得分:1)
我发现前者更易读,更易于掌握,我确信两者之间的任何性能差异都是可以忽略不计的。
我全都是1)。
答案 3 :(得分:1)
你甚至可以跳过括号:
$tags = array();
while ($tags[] = $stmt->fetchObject());
该代码肯定有点短,因为它的形式更详细:
$tags = array();
while ($tag = $stmt->fetchObject()) {
$tags[] = $tag;
}
然而哪一个更容易阅读?你可以说两者都很明显,实际上我会同意你的观点。但是哪一个在一般维护方面更容易?要以较短的形式添加$tag->doSth();
之类的新语句,您必须完全重写它。在最后一个中,您只需添加该语句。
答案 4 :(得分:0)
当然,只要FetchObject()
每次被调用时都适当地改变其返回值;)