2014-09-05 65 views
0

考慮這種情況下:「如果」與轉讓是一個很好的做法?

大型代碼:

if($site->getUser($id)){ 
    $user = $site->getUser($id); 
    //more code here 
} 

短代碼:

if($user = $site->getUser($id)){ 
    //already have the user 
    //more code here 
} 
在第一種情況下

,我做2次獲得BBDD用於獲取用戶,但在第二隻有一個... 第二種情況,是一種很好的做法?

+0

在第一種情況下,你調用的函數*** 2 ***倍(當時只有一次就夠了),這就給了你你的答案:) – 2014-09-05 09:15:08

+0

我猜「正確」的短代碼應該是'$ user = func(); if($ user){' – Sugar 2014-09-05 09:17:21

+0

是的,我對$ user = this_> getUser()更加滿意。如果($ user){....} – 2014-09-05 09:30:12

回答

0

我更喜歡這個。

$user = $site->getUser($id); 
if($user){  
    //more code here 
} 

一般情況下,應避免條件分配。許多編程語言甚至不允許它。太容易犯錯誤。 它在可讀性方面也更好。

+0

這樣,對我來說,最清晰的是 – 2014-09-05 09:31:45

+0

爲什麼他們一般應該避免?贊成這種說法的理由是什麼? – 2014-09-05 09:32:56

+0

正如我寫的:錯誤/錯誤(confusing =和==)和可讀性 – 2014-09-05 09:36:02

0

重複調用一個潛在的昂貴和/或有副作用的函數在任何情況下都不是一件好事,所以通常應避免使用第一個樣本。如果該方法純粹是一種不執行任何邏輯代碼的被動getter方法,則可能出現異常情況;但是由於這個實現可能會改變,所以你應該避免它。

if ($foo = bar()) ... 

針對以上可以說,錯別字混淆===並不少見,所以這可能會導致錯誤和/或受到不必要的混亂,未來開發商閱讀代碼。最少引起爭議的方法應該是:

$foo = bar(); 
if ($foo) ... 

但是,有些人更喜歡將其縮短爲if-assignment-in;這是一種文體選擇。

0

是的,在我看來。 但是,我習慣於這樣的代碼。

if($user = ($site->getUser($id))){ 
    //already have the user 
    //more code here 
} 

警告這

if($flag = $usrType == $type)){ 
    //already have the user 
    //more code here 
}