2011-08-06 3 views
5

나는 흥미로운 사용법을 발견했습니다. 누군가가 벌어지고 정확히 확인할 수있다 (내가 그것을 이해한다면, 나는 미래에 나 자신을 사용할 수 있습니다) 경우 반환 명령 연산자 및 감사하겠습니다반송 명령에서 OR (||) 사용 확인

코드는

 
    return (
     empty($neededRole) || 
     strcasecmp($role, 'admin') == 0 || 
     strcasecmp($role, $neededRole) == 0 
    ); 

$ neededRole입니다 $ role은 null, 'admin'또는 'manager'입니다.

나는 다음과 같이 읽고 있습니다.
$neededRole이 비어 있으면 더 이상 확인하지 않아도됩니다. true를 반환하고 검사를 중지합니다.
($role == 'admin')의 경우 필요한 역할에 상관없이 액세스를 허용합니다. true를 반환하고 검사를 중지하십시오.
($role == $neededRole) 다음 액세스 허용. true를 반환하고 검사를 중단합니다.

'true'에 도달하면 검사가 중단되고 'true'가없는 행의 끝에 도달하면 false로 설정됩니다.

마크에 가깝습니까?

+0

의 예를 참조 맞아, 본인은 그것을 읽을 알고 싶어요 –

답변

7

네, 맞습니다. 이를 short-circuit evaluation이라고합니다. 모든 조건이 거짓으로 평가되면 최종 반환 값은 false || false || false이며 false입니다.

이 연산자는 && 연산자에도 사용할 수 있지만 첫 번째식이 false 값이되면 평가가 중단됩니다.

0

예, 당신이

이 기술의 이름이있는 경우, 추가 잊어 버렸 manual

// foo() will never get called as those operators are short-circuit 
$a = (false && foo()); 
$b = (true || foo()); 
$c = (false and foo()); 
$d = (true or foo()); 
관련 문제