PHP에서 참조로 전달하는 것과 값으로 전달하는 것의 차이점

王林
풀어 주다: 2023-02-24 07:12:02
원래의
3457명이 탐색했습니다.

PHP에서 참조로 전달하는 것과 값으로 전달하는 것의 차이점

값으로 전달

함수 범위 내에서 값에 대한 모든 변경 사항은 함수 외부에서 무시되며 값으로 전달하면 두 변수가 두 개의 메모리 주소를 가리킵니다.

$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿