2013-09-27 75 views
0

對於模糊的問題標題,我很抱歉。我不確定這個簡寫方法的實際名稱是什麼。如果有人想幫助澄清我應該如何參考這一點,我很樂意改變問題標題。內聯條件陳述澄清

在下面的代碼片段:

$account = $value->uid ? user_load($value->uid) : '';

我對這個代碼做什麼有點困惑。這是我認爲它的作用: if $value->uid exists then $account = user_load($value->uid) else $account = ''

這是正確的嗎?

+0

是它是正確的... – karthikr

+0

[文檔可以在這裏找到(HTTP:// PHP .net/manual/zh/language.operators.comparison.php#language.operators.comparison.ternary) – zzzzBov

+0

大多數答案都是正確的,但有一點需要考慮:可讀性。三元運營商是「壞」的閱讀。代碼的可維護性是一個重要方面,易於閱讀和易讀的代碼使維護代碼更加容易。關於該主題的推薦書籍http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 – burzum

回答

1

這就是所謂的ternary operator

這意味着,如果$value->uidtruthy,那麼$account = user_load($value->uid)。否則,$account = ''

這些值在PHP認爲是 「falsy」:

  • 0。0
  • 「0」
  • 「」
  • 陣列()
+0

所以如果$ value-> uid返回數字322,那會被認爲是truthy,是嗎? – JRizz

+0

是的。看看[這篇文章](http://www.phabricator.com/docs/phabricator/article/PHP_Pitfalls.html)更全面解釋真實和虛假的價值觀。 – Bucket

+0

會做。感謝您的偉大答案! – JRizz

3

它一樣:

if ($value->uid) { 
    $account = user_load($value->uid); 
} else { 
    $account = ''; 
} 
3

他們被稱爲三元語句。是的,你幾乎是正確的。 差不多

如果再$value->uid存在$account = user_load($value->uid)其他$account = ''

這會更正確:

如果$value->uid輸出TRUE,然後$account = user_load($value->uid),否則,$account = ''


使用正常if/else塊,它會是:

if($value->uid) { 
    $account = user_load($value->uid); 
} else { 
    $account = ''; 
} 

的文檔可以找到here

1

這是PHP ternary operator,該工程幾乎完全像在其他語言中三元:

$value = ($test_value) ? 'true result' : 'false result'; 

完全等同於

if ($test_value) { 
    $value = 'true result'; 
} else { 
    $value = 'false result'; 
} 
1

你的假設是不完全正確的。

$account = $value->uid ? user_load($value->uid) : ''; 

相同

if ($value->uid) { 
    $account = user_load($value->uid); 
} else { 
    $account = ''; 
} 

if ($value->uid)不只是檢查變量存在。這將返回false,如果該變量爲undefinednullfalse0''(和我可能忘了一些在這裏)