2011-05-31 76 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