//참고로 반품
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
두 번째 함수는 할당된 변수의 값을 변경합니다. $cr = 4, 함수의 반환 값은 왜 변경되지 않습니까?
//참고로 반품
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
두 번째 함수는 할당된 변수의 값을 변경합니다. $cr = 4, 함수의 반환 값은 왜 변경되지 않습니까?
첫 번째 함수의 코드는 실제로 이렇습니다. $b
은 정적 변수이므로 함수가 실행된 후에도 해제되지 않습니다.
<code class="php">... //省略代码 $c = &$b; $c = 12; //此处$b为12 $d = testReturn(); //$b+2 echo $d; //当然是14而不是7</code>
그러나 두 번째 함수에서 $a
은 지역 변수입니다. 함수가 실행된 후 이 변수의 메모리가 해제됩니다.
먼저 호출 함수가 참조를 반환하는지 여부를 명확히 해야 합니다. 함수 이름 앞에 &가 와야 하고, 대입문 앞에는 &가 와야 합니다. 🎜> 질문 제목은 실제로는 참고용이 아닙니다.
질문자 말씀으로 돌아가서, 왜 반환 값이 변경되지 않았나요? $cr1 = cuitReturn();
함수의
로컬 변수를 참조하는 것과 같습니다. cuitReturn
이것을 C++에 배치하면 큰 문제가 발생합니다... 포인터가 알 수 없는 메모리를 가리킨다는 의미이지만 $a
PHP 엔진이 이를 처리해야 하므로 $cr = &cuitReturn();
(에 대한 참조가 유효하지 않음 )