2013-07-25 4 views
1

나는 문제가 있기 때문에 작업의 우선 순위가 될 수 있다고 생각 Why is this code an infinite loop?

대답려고해서는 안하지만 http://php.net/manual/en/language.operators.precedence.php을 점검 할 때, . 그래서 나는 =

보다 우선 순위가 다음 코드를 시도 :

$a.$b = "test"; 

echo $a; 
echo $b; 

을하고 나는 그것이 $ B, 어떻게이 할당되어 버지니아에 값을 할당하는 것을 의미 정의되지 않은 변수 atest있어 이것은 않습니다

($a.$b) = "test"; // you can't assign to the result of an expression 

:

$a.($b = "test"); 

깊은 이보다 것없이, 나는 PHP 컴파일러 생각 $ B에 루는

+0

이 문제의 연산자 우선 순위 규칙을 참조 할 수 있습니다 : 이것을 증명하기 위해

, 다른 할당을 추가? – Joe

답변

3

나는 대답이 명확 in the docs 언급 믿습니다 = 대부분의 다른 사업자보다 낮은 우선 순위를 가지고 있지만

, PHP는 여전히 다음과 같은 표현 수 : if (!$a = foo())을하는 경우 foo()의 반환 값 $a에 넣습니다.

당신이 표현에 할당 할 수 없기 때문에, Jon's answer에 확장은 =다음 문보고 우선 순위와 인터프리터를 취합니다

$a.($b = "test"); 

그래서 그들은 두 개의 별도의 표현이 될를 각각 다음 그들 자신의 우선 순위. 따라서 test$b에 할당됩니다.

$a = 'my '; 
$c = $a.$b = "test"; 

var_dump($a); // string(3) "my " 
var_dump($b); // string(4) "test" 
var_dump($c); // string(7) "my test" 
+0

좋은 찾으십시오."정상적인 프로그래머가 그런 식의 코드를 작성할 수 없기 때문에 그것에 대해 생각하지 마십시오."때문에 모르는 것 중 하나입니다. :-) +1 – Jon

+0

네, 저도 * Who Cares * 아래에 그런 질문을합니다. 절름발이 인터뷰 또는 과시하고 싶은 인터뷰 예약. 그러나, 그것은 내가 오늘 보았던 첫번째 질문이었다. 그리고 나는 빨려 들게되었다. –

3

(하지 작업 우선 순위에 따라 함)이 이해가되지 않습니다 후자를 작성한 것처럼 코드를 해석하여 "작동 할 것"입니다.

PHP 파서의 결함이 "흘러 넘기지"않으며 코드에 놀라운 영향을 미치지는 않습니다.

업데이트 : 밝혀졌습니다. this is not a bug, it's a feature.

+0

그 느낌이 맞지만 그걸 뒷받침 할 언어 사양이 있습니까? – Joe

+0

@Joe : PHP에 대한 언어 사양은 없지만, 모두를 위해 무료입니다. 제가 말하고자하는 바입니다. 적절한 문법과 스펙을 가진 언어에서는 컴파일 오류가 발생합니다. – Jon

+0

그렇다면 연산자 우선 순위 규칙은 어떻습니까? –