2017-10-04 34 views
2

我想了解php如何hadles這個例子。究竟如何檢查布爾值在括號中

(\Auth::check() || \Auth::user()->isAdmin()) 
(\Auth::check() && \Auth::user()->isAdmin()) 

\驗證::檢查()僅給出了或真或假,而\驗證::用戶() - > isAdmin()可以給真,假或用戶對象可以爲空,isAdmin()函數給出錯誤。 (Auth :: check()|| \ Auth :: user() - > isAdmin())它給我錯誤,因爲\ Auth :: check()是false並且\ Auth :: user ()爲null,但是當我替換||時與& &沒關係,雖然用戶對象仍爲空,並且isAdmin函數必須給出錯誤。

P.S.對不起,模糊的問題(我不知道該怎麼辦,如果有需要改變的問題,但已經有答案)一些澄清: 我懷疑,當有& &和PHP檢查第一個參數,它是假的,然後PHP從不檢查其他。我對嗎?我這樣認爲,因爲在我的情況(假& &空值>方法)只能得到錯誤的,但是(假||空值>法)給出了錯誤,因爲空值的>方法

回答

0

我只是在實踐中檢驗和看着辦吧:

$a = null 
dd(false && $a->func()); 

,並返回false但隨後試圖dd(false || $a->func());這回錯誤:Undefined variable: null

所以,如果& &如果第一個參數是假的PHP不檢查其他參數,即使它不是布爾值(在我的情況下$ a-> func())

0

I suspect that when there is && php check only first argument and drop other. Am I right?

-No。 $ a & & $ b如果$ a和$ b都爲TRUE,則爲TRUE。

2

您可以在這裏邏輯運算符念起來:http://php.net/manual/en/language.operators.logical.php

||是或運算,如果左邊或右邊是真,那麼情況將成爲過去。首先測試操作員的左側,然後右側

&&是AND運算符,如果左側和右側爲真,條件將通過。左側先運行,然後右側運行。如果左側爲假,則從不評估右側。

0

還有一件事。 true && null將導致布爾上下文中的null評估爲false,並將整體評估爲false;請參閱:第一個比較表here

實施例:

<?php 

var_dump(true && null); 

live code.

邏輯&&是一個二進制運算符,並且當使用該操作者的表達式計算兩個只有一個可能的結果是可能的,即真或假。