2012-02-27 4 views
8
$bar = 7; 
$foo =& $bar = 9; 

기술적 인 관점에서 보면 오른쪽에서 왼쪽으로 평가하지 않겠습니까? 그래서 : $ bar = 9; $ foo = & $ barPHP에서 참조되는 변수에 할당 할 수없는 이유는 무엇입니까?

궁금한 점이 있으시면. 내가 이것을 한 줄로하고있는 이유는 발톱 손톱 깍기를 피하기 위해서입니다.

+7

발톱 손톱 잘라 내기? – Tim

+0

'$ foo = & ($ bar = 9)'와 동일합니다. 분명히 작동하지 않습니다. – h0tw1r3

+0

대괄호를 추가해도이 경우 더 이상 명확하지 않습니다. 당신은 단순히 악마의 옹호자라는 사실을 알고 있습니다. 의미 론적으로 9가 $ bar로 반환되는 팬이 아니지만 이는 의미가 있습니다. –

답변

13

할당 표현 $bar = 9$bar (즉, 변수 자체)에 대한 참조를 반환하지 않습니다. 대신 정수 값 9을 반환합니다.

또는 당신이 manual에서 견적을 필요로하는 경우 :

대입 연산자의 값은 할당 된 값입니다. 즉, "$ a가 = 3는"당신은 그 값을 유지하는 변수에 값을 직접 참조를 할당 할 수 없습니다 3.

이다의 값입니다. 따라서 귀하의 편리한 한 줄짜리 라이너는 눈부신 실패로 끝나고 두 줄로 나누어야합니다.

$bar =& 9; 

가 유효하지 않다는 매우 같은 이유로

+0

감사합니다 BoltClock,이 의미가 있습니다. C++에서 이렇게 작동합니까? 필자는 컴파일러를 편리하게 사용하지 못합니다. C++에서 그렇게 작동하지 않는다면이 방법으로 작동하는 언어가 있습니까? 심지어 가능할까요? 내 말은 왜 $ 막대를 반환하지 않고 마지막 순간까지 막대를 리터럴로 평가하지 않는 것이 좋을까요? 이런 식으로 리터럴에 머물지 않고 막대의 참조를 얻을 수 있습니까? –

+0

필자가 아는 한, 기본 (ints, longs, float, chars)에 대해 다른 C 스타일의 언어에서도 동일하게 작동합니다. 할당 표현식은 항상 기본적으로 할당 된 값을 반환합니다. 귀하의 마지막 질문에 관해서는 ... 할당 연산자의 정확한 의미에 대해 잘 모르겠습니다. 그래서 그것에 대해 자세히 설명 할 수는 없습니다. – BoltClock

+0

하하, 그것에 대해 생각하고, 내 마음은 너무 많은 자바 스크립트에서 버릇입니다. 문제는 $ bar 및 모든 변수가 참조가 아니라는 것입니다. 그래서 볼트, 다음과 같은 C++ 작업 : "int v; int & j; v = j = 9;" 나는 그렇게 생각한다. 아아, 나는 PHP에서 비슷한 것을 쓸 수 있다고 생각하지 않는다. –

2

(참조 다른 변수를 가리킬 수 있기 때문에, 일정하지만/리터 생략). 참조 : http://www.php.net/manual/en/language.references.whatdo.php

+0

내가 혼란스러워했던 것에 대한 BoltClock의 대답을보십시오. 나는 당신이 리터럴로부터 레퍼런스를 취할 수 없다는 것을 안다. 내가 알지 못했던 것은 그 할당이 참조가 아닌 리터럴을 반환한다는 것입니다. –

관련 문제