2010-11-26 4 views

답변

40

참조로 전달됩니다. 함수 내부의 변수는 호출 컨텍스트의 변수와 동일한 데이터를 가리 킵니다.

function foo(&$bar) 
{ 
    $bar = 1; 
} 

$x = 0; 
foo($x); 
echo $x; // 1 
+1

나는 – cambraca

+2

그래서 그것이 진정한 종류,'전역의 $ var' – Alex

+4

@ 알렉스를 사용할 때와 비슷한 동작 .. 내 예제에서'foo'와'bar'을 사용하기 시작있어,하지만 큰이있을 것 차이점 : 1) 전역이 아닌 범위 (다른 함수를 호출하는 함수)에서 작동하며 2) 변수의 이름을 알고있는 내부 함수에 종속되지 않습니다. 함수 인수로 참조되는 변수는 전역 변수보다 디버그가 쉬우 며 오류가 발생하기 쉽지만 같은 문제 (예 : 변수에 예기치 않은 변경)가 적용되는 경우에도 마찬가지입니다. – Matthew

5

매개 변수로 변수에 대한 참조를 허용합니다.

이것은 함수가 매개 변수 (예 : $var = "Hi!")를 변경하면 호출 함수가 전달한 변수에 영향을 미칩니다.

15

기본적으로 기능 내부에서 $var을 변경하면 외부로 변경됩니다. 예를 들어 :

$var = 2; 

function f1(&$param) { 
    $param = 5; 
} 

echo $var; //outputs 2 
f1($var); 
echo $var; //outputs 5 
+0

감사합니다. 매우 명확하게 작성되었습니다. –

2

변수 (& $ foo는) 이전에 앰퍼샌드 (&)는 대신에 참조로 변수를 전달하도록 지정 값으로 패스를 재정의합니다. 예를 들어

이있는 경우 :

function doStuff($variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '1' because you passed the value, but it doesn't alter the original variable 

doStuff(&$foo); // this is deprecated and will throw notices in PHP 5.3+ 
echo $foo; 
// output is '2' because you passed the reference and php will alter the original variable. 

그것은 두 가지 방법을 사용할 수 있습니다.

function doStuff(&$variable) { 
    $variable++; 
} 

$foo = 1; 

doStuff($foo); 
echo $foo; 
// output is '2' because the declaration of the function requires a reference. 
+5

''doStuff (& $ foo)''호출 대기 시간에 의한 참조를 사용하는 두 번째 예제는 더 이상 사용되지 않으며 사용되어서는 안됩니다. – Matthew

+0

알아두면 좋은 정보. 감사! –

+2

내 의견은 추가 코드로 인해 오도 된 것일 수 있습니다. 그래서 명확하게 :'function doStuff (& $ variable) {}'은 괜찮지 만, 호출 시간에'doStuff (& $ variable);'는 유효하지 않습니다. – Matthew

2

이것은 pass by reference입니다.

C 포인터에 익숙하다면 포인터를 변수에 전달하는 것과 같습니다.

(C와 같이) 역 참조 할 필요는 없습니다. 이 야유의 함수 내에서 수정 될 때

+0

+1. 이 포인터가 C에서 의미하는 포인터라면 위의 것을 읽을 때 궁금해하십니까? 귀하의 확인과 함께 이제는 완벽하게 이해됩니다. – Kaji

2

당신이 업데이트 될 때 $ var에의 실제 값을 의미 기준으로 $ var에 전달하는 예는

:

function boo(&$var) { 
    $var = 10; 
} 

$var = 20; 
echo $var; //gets 20 
boo($var); 
echo $var //gets 10 
-1

어떤 기능이 앰퍼샌드로 시작하면 (&) , Reference 함수에 의한 호출을 의미합니다. 값 대신 변수에 대한 참조를 리턴합니다.

function reference_function(&$total){ 
    $extra = $total + 10; 
} 

$total = 200; 
reference_function($total) ; 
echo $total; //OutPut 210 
+0

접수 된 답안의 (직접 어미에서 두 번째 줄에있는 오타가있는) 직접 답안 사본이 더 많거나 적게 보일 때 이것이 무엇을 추가하는지 설명하십시오. – DaveP

+0

나는 나의 대답을 향상시켰다. 직접 변수를 수정해야한다면 위와 같이 호출 할 수 있는지 설명하려고합니다. 감사합니다. – Anujayweb

관련 문제