2010-08-19 2 views
29

가능한 중복은 : What do the "=&" and "&=" operators in PHP mean?PHP 연산자 = & 의미는 무엇입니까?

는 다음 코드에서 연산자 "= &"을 발견했고, 나는 그것이 무엇을 의미하는지 모른다. 그것은 무엇을 의미하며 그것은 무엇을 하는가?

나는 그것을을 읽을 수있는 코드 :

function ContentParseRoute($segments) 
{ 
    $vars = array(); 

    //Get the active menu item 
    $menu =& JSite::getMenu(); 
    $item =& $menu->getActive(); 

    // Count route segments 
    $count = count($segments); 
     .... 
+3

http://stackoverflow.com/questions/1367454/what-do-operators-in-php-mean – muhmuhten

답변

7

그것은 참조 할당 연산자입니다.

는 나중에 코드에서의 연산자의 좌측을 수정할 때, 그것은 우를 수정하는 것을 의미합니다. LHS가 RHS와 동일한 메모리 블록을 가리키고 있습니다.

+4

좌 = 왼쪽 손 사이드 RHS는 = 오른손 사이드 – Htbaa

+0

이 올바른지 (적어도 당신이 말하지 않았다 "이들은 실제로 두 명의 연산자입니다"). 그러나, 마지막 구절은 다소 오도 된 것입니다. '$ a = $ b; '에서'$ b'는 대부분의 경우'$ a'와 같은 메모리 블록을 가리 킵니다.차이점은 수정시 변수가 분리되고 참조 집합에 있으면 변수가 분리된다는 것입니다. 'LHS와 RHS의 기호가 같은 변수라는 것 '또는 그 효과가있는 것보다 더 정확할 수도 있고,'메모리 '참조를 생략 할 수도 있습니다. – Artefacto

+0

수용된 대답은 RHS를 수정할 때, –

52

이 참조 (&)에 의해 할당 (=) 아니다.

당신이 말한다면 :

$a = 42; 
$b =& $a; 

당신은 참조에 의해 $a$b에 할당 말 실제로 있습니다.

이다 않는 참조 무엇 할당 함께 두 변수 "묶어". 이제 $a을 나중에 수정하려는 경우 $b이 변경됩니다. 예를 들어

:

$a = 42; 
$b =& $a; 

//later 
echo $a; // 42 
echo $b; // 42 

$a = 13; 
echo $a; // 13 
echo $b; // 13 

편집 : Artefacto으로

$a =& $b하지$a = (&$b)와 동일 코멘트에 지적한다. & 운전자가 무언가 중 기준을 의미하면서 = 조작자가 할당 - 부산물 을 수행하기 때문에

는이므로 식 $a = (&$b) 수단 $b에 임시 참조하면, 그 임시의 값을 할당 할 $a으로 변경되며, assign-by-reference가 아닙니다.

+9

-1'$ b = (&$a);'은 유효하지 않은 구문이지만, 실제로는 하나의 연산자이고'= &'는 opcode'ASSIGN_REF'로 변환됩니다. 이 함수는 참조를 반환하지만'$ a'는 참조가 아니기 때문에'$ a = func()'에 의해 반환되는'func' 함수를 생각해 봅시다' = '는 참조 집합을 깨뜨리고 플래그를 지운다 실제로는'$ a = & $ func()'을해야한다.'&'는 "이것 (예를 들어'array (& $ a)') 참조를 만드는 것만으로는 충분하지 않습니다. – Artefacto

+3

정말요? 지금은 몰랐습니다. 나를 위해 전에 ke (적어도 명백하게). 매일 무언가를 배울 것 같네요. :) 나는이 수정에 대한 나의 대답을 편집 할 것이다. –

3

여기에 사용에서의 예 :

$array = array('apple', 'orange', 'banana'); 

// Without & 
foreach($array as $d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // apple, orange, banana 

// With & 
foreach($array as &$d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // fruit, fruit, fruit 

하지 설명하지만, =& 할당에서 그것을 사용하지 않고 & 연산자를 사용 할 수있는 예.

+1

다른 답변에 대한 내 의견보기. '&'의 여러 의미를 혼동하지 마십시오. 그들은 모두 어떻게 든 참조와 관련이 있지만 같은 것을 의미하지는 않습니다. – Artefacto