2011-05-31 71 views
1

在此代码片段:清晰度使用IF(COUNT())

$results = $this->getAdapter()->fetchAll($query); 

if(count($results)) { 
    // … 
} 

...你考虑,如果(COUNT())部分是是一个很好理解的成语,或代码的混乱。即它应该是

if(count($results) > 0) 

???

+2

个人我总是使用后者作为它更多的信息和真正的,你真的获得了离开4个字符的好处吗? – Aleski 2011-05-31 11:58:03

回答

2

使用带有'if'的布尔表达式比使用隐式转换需要更少的语言理解,所以我总是更喜欢第二个选项(添加“> 0”) - 至少如果这个代码是为了读取其他人也一样。你永远不知道谁会维护你的代码。这里的关键字是“清晰”。

但是我必须承认,我自己写了很多次if的代码,因为我喜欢它的优雅。

+0

+1为清晰! – Yeroon 2011-05-31 12:05:27

+0

谢谢;看起来这个意见是分裂的,但我认为最有说服力的论点是,你不知道下一步谁会维护代码。 – fazy 2011-06-01 13:05:42

0

嗯......真的不知道这是什么问题的目的是 - 但语义应该是不言而喻的任何人谁懂PHP

1

他们正在做的正是在这种背景下同样的工作,和都易于阅读。

我只是添加(以防万一),如果您只执行此查询if(count()),那么你应该发出一个SELECT COUNT(*)而不是!

1

count和无关的>比较是毫无意义的。如果您收到actualy array,那么测试应该仅仅是:

if ($results) { 

这就是脚本语言是。将低级细节抽象出来。

如果你的fetchAll函数返回一个ArrayObject或类似的东西,你只需要count。例如,如果你的函数有时返回一个false,那么你的if (count(将会失败(因为PHP中的count(false)==1)。

+0

谢谢,有趣的细节。 :) – fazy 2011-06-01 13:07:05

0

我的意见是,> 0检查是多余的和不必要的。

我知道其他的开发者坚持认为它应该在那里,但坦率地说,我不能这么做 - 任何能够阅读PHP的人都应该能够辨别出它们是相同的。

+0

但你失去了什么?它需要半秒钟的时间才能完成,绝对保证100%的清晰度? – Aleski 2011-05-31 12:14:39

+0

@Aleski - 没有它,我没有看到任何缺乏清晰度。这是我的观点。 – Spudley 2011-05-31 12:19:34

+0

如果您对清晰度没有任何疑问,那么您为什么要在自己的答案中写下“应该能够”而不是“能够”?我认为这是很好的“防御性编程”,而不是期望下一位程序员拥有和你一样的声音知识。 – Ray 2011-05-31 12:31:08