값으로 전달
함수 범위 내에서 값에 대한 모든 변경 사항은 함수 외부에서 무시되며 값으로 전달하면 두 변수가 두 개의 메모리 주소를 가리킵니다.
$a = 6; $b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响 $b = 7; echo $a; // 输出:6 function foo($b){ echo ++$b; } foo($b); // 输出:8 echo $b; // 输出:7 说明函数内的改变对函数外的值没有影响,因为,当 $b 传入函数内的时候是值传递, 会把值在内存中拷贝一份存入一个新的内存地址中
참조로 전달
함수 범위 내에서 값을 변경하면 함수 외부의 수정 사항도 반영됩니다. 참조로 전달하면 변수의 메모리 주소 식별자가 내부 및 외부 변수에 전달됩니다. finally 메모리의 동일한 주소를 가리킵니다.
$a = 6; $b = &$a; $b = 7; echo $a; // 输出:7 function foo(&$c){ echo ++$c; } foo($b); // 输出:8 echo $b; // 输出:8 说明函数内的改变对函数外的值有影响,因为,当 $b 传入函数内的时候是引用传递, 函数体内的$b和外部的$b实际上是指向同一个内存地址,所以一个改变,另外一个变量的值也会改变
function func(&$arr){ $arr['a'] = []; $arr = &$arr['a']; $arr['b'] = '333'; var_dump($arr); } $arr = [ 'a' => '111', 'b' => '222' ]; func($arr); var_dump($arr); /** # 第一个输出: array(1) { ["b"]=> string(3) "333" } # 第二个输出: array(2) { ["a"]=> array(1) { ["b"]=> string(3) "333" } ["b"]=> string(3) "222" } */
위의 예는 분명히 참조로 전달되었습니다. 두 $arr가 서로 다른 결과를 인쇄하는 이유는 무엇입니까?
단계 연산이 있기 때문에 $arr = &$arr['a']; 이 단계 이후에는 함수에서 $arr의 가리키는 주소가 변경되어 $arr['a']를 가리키므로 결과가 두 번 인쇄됩니다. 다르다.
참고: PHP는 객체에 대해 기본적으로 값별 참조를 사용합니다. 일반적으로 값별 참조는 함수 본문 내에서 들어오는 매개변수를 변경해야 하고 다른 경우에 영향을 받아야 할 때 사용됩니다. , 가치 기반 이전이 일반적으로 사용됩니다.
추천 튜토리얼: PHP 비디오 튜토리얼
위 내용은 PHP에서 참조로 전달하는 것과 값으로 전달하는 것의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!