2017-10-04 5 views
2

나는 PHP가이 예제를 어떻게하는지 이해하려고 노력하고 있습니다.정확히 어떻게 PHP는 부울 값을 괄호로 검사합니까

인증 :: 검사 \
(\Auth::check() || \Auth::user()->isAdmin()) 
(\Auth::check() && \Auth::user()->isAdmin()) 

은() \ 인증 : 사용자() 동안 만 허위 또는 사실 제공 -> isAdmin()가 true false를 제공 ​​할 수 있습니다 또는 사용자 객체가 null이 될 수 isAdmin() 함수는 오류를 제공 .

\ Auth :: check() || \ Auth :: user() -> isAdmin()) \ Auth :: check()가 false이고 \ Auth :: user가 잘못되어 오류가 발생합니다()는 null이지만, || & & 사용자 개체가 여전히 null이지만 isAdmin 함수가 오류를 제공해야하지만 괜찮습니다.

P. 미묘한 모호한 질문 (질문을 변경해야하지만 이미 답변이있는 경우 어떻게 해야할지 모르겠다.) 약간의 설명 : & & 일 때 php가 첫 번째 인수를 확인하고 false이면 php 절대 다른 사람을 검사하지 않습니다. 내가 맞습니까? 나는 때문에 내 경우에 그렇게 생각 (거짓 & & 널 (null) 종료가> 방법)을 얻었다 단지 거짓하지만 (거짓 ||의 널 (null) 종료> 방법) 방법

답변

0

:

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

하고 false를 반환하지만 그것은 dd(false || $a->func()); 노력이 반환 오류 : Undefined variable: null

그래서 경우에 & & 첫 번째 인수가 false 인 경우 PHP는 부울이 아닌 경우에도 다른 인수를 검사하지 않습니다 (내 경우 $ a-> func())

0

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

아니> 때문에 널 (null) 종료의 오류를 제공합니다. $ a & & $ b $ a와 $ b가 모두 TRUE이면 TRUE입니다.

2

현재 논리 연산자에 읽을 수 있습니다 http://php.net/manual/en/language.operators.logical.php

||입니다 또는 왼쪽 또는 오른쪽에 해당하는 경우 운영자, 다음 조건을 전달합니다. 연산자의 왼쪽이 먼저 테스트 된 다음 오른쪽이됩니다.

이 AND 연산자이면 왼쪽과 오른쪽이 참이면 조건이 충족됩니다. 왼쪽이 먼저 실행되고 오른쪽이 실행됩니다. 왼쪽이 거짓이면 오른쪽이 평가되지 않습니다.

0

한 가지 더. true && null은 전체를 false로 평가하는 표현식과 함께 부울 컨텍스트에서 false로 평가되는 null이됩니다. 참조 : 첫 비교 표 here.

예 :

<?php 

var_dump(true && null); 

live code.

논리 && 이진 연산자이 연산자를 사용하여 표현은 평가할 때 오직 하나의 두개의 가능한 결과 즉, 참 또는 거짓 가능하다.

난 그냥 실제로 테스트를 알아낼