2016-12-02 24 views
0

我看到了這行代碼,我在問自己這個syntaxe訪問對象的字段可以爲空

if(false && isset($_SESSION['new_user']) && $_SESSION['new_user'] == true) 

基本上方面的原因,更好的辦法是,如果我們有一個新的用戶,我們對待他與現有用戶不同。

我的第一個猜測是爲了避免空變量中的搜索值。所以他首先測試一下是否有變量,如果有,則檢查它的值。那是他做的?

但是裏面的一切if語句。

我的問題是,如果if語句的第一部分爲假,第二部分未經過測試?這是一個很好的做法嗎?或者會更好地這樣做:

if(($_SESSION['new_user']){ 
    if ($_SESSION['new_user'] == true){ 
     [...] 
    } 
} 
+1

'if(false && ... &&)'總是評估爲'FALSE'。這是臨時禁用代碼塊的一種快速方法(它強制執行採用'else'分支,如果存在的話)。 – axiac

+0

如果因爲if中的第一個元素而總是評估爲false。 'if(false && ...)' – Dragos

+1

與問題的核心無關,但FWIW,您正在代碼中訪問_array_,而不是對象。 –

回答

3

您的解釋是正確的。當使用&&(AND)時,如果第一個條件不符合,則不會檢查其他條件。

因此,只要您瞭解代碼的工作方式,您如何格式化if並不重要。

但是,在您的第一個示例中,false將確保條件從未如此。在這種情況下,這是相當無用的。

1

如果IF表達式中AND表達式的第一部分爲假,則不需要測試其餘部分。所以這是正確的,並以這種方式使用。

,如果語句總是會因爲

if (false && ...) 

返回false因此,如果塊永遠不會運行。這可以簡單地將代碼從運行中排除而不刪除它(因爲稍後有人可能需要它)。這不是很好的編程習慣。

如果你想檢查一個值存在,並且不爲空(在PHP假==空),你可以做以下,使查詢簡單(離開了第一個條件是false):

if (!empty($_SESSION['new_user'])) { 

如果存在密鑰,則empty()會隱式檢查。這意味着你可以擺脫isset()。但是,這隻適用於檢查emtpy /非空值的情況。如果您想檢查特定的ID,比你要使用

if (isset($_SESSION['new_user']) && $_SESSION['new_user'] == 'myNewUser') { 
0

你的猜測是正確的,但代碼有一個特點 - 和一個陷阱。

if(false && isset($_SESSION['new_user']) && $_SESSION['new_user'] == true) 

功能是初始false立即中止對比,使以下項目評估(這個你一定要記住,如果你曾經放置有一些代碼有副作用,例如作爲初始化某個值的函數調用)。

接觸是you should never use isset to verify whether a key exists。在這個的情況下,但一般情況下,現有的值爲NULL將使isset返回false

最後,如果變量類型,只是要確定,使用比較強的運營商===:

if (false && array_key_exists('new_user', $_SESSION) && $_SESSION['new_user'] === true) 

個人而言,我會寫它

if (false && array_key_exists('new_user', $_SESSION) && (true === $_SESSION['new_user'])) 

,因爲我有時會敲錯a =並最終分配我想要比較的內容。如果你不像我那樣肥胖,你可以省去這個偏執的褶皺:-)

相關問題