2012-01-17 3 views
0
$var4 = 123; 

function fn1($p1) 
{ 
    return array('p1' => 1, 'p2' => 2); 
} 

if ($var1 = fn1(1) AND $var4 == 123) 
{ 
    print_r($var1); 
} 

if ($var2 = fn1(1) && $var4 == 123) 
{ 
    print_r($var2); 
} 

if (($var3 = fn1(1)) && $var4 == 123) 
{ 
    print_r($var3); 
} 
  1. 에 영향을 미치는 당신이 나를 위해 적어도 에서이 출력 이상한 결과를 것이 간단한 스크립트를 실행하는 경우! 첫 번째 표현식에서 첫 번째 출력이 의 배열에서 반환됩니다. &이 $ var1 변수에 할당되었습니다. 이것이 내가 예상 한 것입니다.
  2. 두 번째 출력에서 ​​두 번째 출력은 $ var2 변수에 할당 된 '1'이라는 정수가됩니다. 이는 전혀 예상되지 않습니다! 유일한 변경 사항은 논리 연산자입니다. 'AND'가 아닌 '& &'을 사용했습니다. 그게 전부입니다 !! 표현이됩니다 경우 세 번째에서
  3. 세 번째 출력은 다시 예상 배열은 정확히 표현하면 처음과 같이 $ VAR3 변수에 할당 된 기능 &에서 를 반환하지만, 대기 : 난 그냥에 할당 문을 전적으로 수용 대괄호 내의 표현식 인 경우 두 번째 if 표현식 코드를 계속 사용합니다!

누구나 기술적으로 설명 할 수 있습니까? 왜 이상한 행동입니까? php.net 참조 링크를 주시면 감사하겠습니다.PHP 논리 연산자의 우선 순위는 변수 할당 결과 이상하게

나는 '& &는'보다 더 높은 우선 순위를 가지고 'AND'하지만 나에게 그것을 설명하지 않는 것을 알고있다!

답변

3

PHP: Operator Precendence

& &이 =보다 높은 우선 순위를 갖는 제 너무 if 인 경우 fn1(1) && $var4 == 123 (true 또는 false) 값을 $ var2에 할당합니다.

첫 번째 AND에서 AND보다 우선 순위가 낮기 때문에 할당이 먼저 발생하면 결과가 비교됩니다.

세 번째 if에서 parens의 모든 항목이 먼저 처리되기 때문에 할당이 먼저 다시 발생합니다.

2

&&=보다 높은 우선 순위를 가지고, 그래서 정말로 일어나는 것은 더 같은 것입니다 : 정말 $ var1에 할당되는 내용 그래서

if ($var1 = (fn(1) && $var4 == 123)) 

당신이 1

을받을 이유 부울 결과입니다
관련 문제