>  기사  >  백엔드 개발  >  PHP 배열은 참조 유형입니까?

PHP 배열은 참조 유형입니까?

青灯夜游
青灯夜游원래의
2022-09-20 19:08:592047검색

PHP 배열은 참조 유형이 아니지만 값 유형입니다. 배열에 값을 할당할 때 다른 변수(복사본)가 생성되므로 다른 변수를 수정해도 배열 자체에는 영향을 미치지 않습니다. 그리고 PHP 배열 전송은 값 전송입니다. 함수를 호출할 때 PHP 배열을 형식 매개변수에 실제 매개변수로 할당하고 함수에서 이를 수정해도 배열 자체에는 영향을 미치지 않습니다. 이는 이 프로세스에서의 전송이 값 전송임을 나타냅니다. 배열 변수는 이 배열 자체에 대한 참조가 아닙니다.

PHP 배열은 참조 유형입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, DELL G3 컴퓨터

PHP에서는 문자열, 정수, 부동 소수점, 배열 등 대부분의 변수 유형이 값 유형입니다. , 클래스와 객체는 참조형이므로 사용 시 주의가 필요합니다.

PHP 변수는 이렇게 메모리에 저장됩니다. 변수가 저장하는 것은 값의 내용이 아니라 주소입니다. 예:

$a = 1;

변수 $a에 값 1이 직접 저장되는 것 같습니다. 실제 상황은 PHP 인터프리터가 변수 $a를 생성하고 값 1을 메모리 어딘가에 저장한 다음 변수 $a에 값의 주소를 저장한다는 것입니다.

값을 구해야 할 때는 먼저 변수 $a에서 주소를 찾은 다음, 그 주소를 기준으로 변수의 값을 찾아보세요.

아래를 살펴보세요:

echo $a;

는 1을 출력합니다. PHP 인터프리터는 다음과 같이 코드를 완성합니다. $a에 저장된 주소를 찾고, 주소를 기반으로 메모리 어딘가에 저장된 값을 찾아 화면에 출력합니다.

간단한 코드 한 줄처럼 보이지만 과정은 이렇습니다.

더 자세히 살펴보세요.

$a = 1;
$b = &$a;

여기서 $b 변수는 흥미로운 작업을 수행합니다. & 기호는 $a 변수에 저장된 주소를 가져와 $b 변수에 저장합니다.

그런 다음 다음 코드를 사용하면

echo $b;

결과도 1로 출력됩니다. PHP 인터프리터는 먼저 $b에 저장된 주소를 꺼낸 다음 주소를 기준으로 값을 찾습니다. 다음 작업을 수행하면

$a = 2;
echo $b; //输出2

$a의 값을 변경하면 $b도 변경된다는 것을 알 수 있습니다. 실제로는 반대로 $b의 값이 변경되면 $a의 값도 그에 따라 변경됩니다.

이 시점에서 변수 $a와 $b는 동일한 주소를 저장하고 동일한 값을 가리킨다는 것을 확인할 수 있습니다.

그러면 동일한 변수를 나타낸다고 결론을 내릴 수 있습니다.

더 요약하자면 두 변수가 동일한 주소를 저장하면 동일한 변수라고 결론을 내릴 수 있습니다.

이제 일부 콘텐츠를 이해했으므로 값 유형과 참조 유형을 소개하기 시작합니다.

먼저 다음 코드를 살펴보겠습니다.

$a = 1;
$b = $a;
$a = 2;
echo $b; //输出 1

$a의 값을 $b에 할당합니다. 즉, $a의 값을 변경한 후에도 $b의 값은 변경되지 않습니다. 서로 다른 주소를 가리키는 두 개의 서로 다른 변수입니다. 다양한 변수를 생성하는 이러한 할당 형식을 값 유형이라고 합니다.

다시 보세요:

class User{
 public $name = ‘Tome‘;
}
$a = new User;
$b = $a;
$a->name = ‘Jim‘;
echo $b->name; //输出 Jim

마찬가지로 $a의 값을 $b에 할당합니다. $a를 변경하면 $b도 변경됩니다. 즉, $a와 $b는 동일한 변수이며 동일한 주소를 가리킵니다. 새 변수를 생성하지 않는 이러한 할당 형식을 참조 유형이라고 합니다.

php 배열 값 유형

PHP에서 전달되는 배열은 참조가 아닌 값으로 전달됩니다.

함수 호출 시 PHP 배열을 실제 매개변수로 형식 매개변수에 할당하고, 함수에서 수정해도 배열 자체에는 영향을 미치지 않습니다.

이 프로세스의 전송은 값에 의한 것임을 설명합니다. 배열 변수는 배열 자체에 대한 참조가 아니며, PHP 배열 자체는 값의 형태로 존재하며 형식 매개변수는 배열의 복사본입니다.

이것은 다른 언어(예: c, Js 등)와 매우 다르기 때문에 주목할 가치가 있습니다!

예제는 다음과 같습니다.

$arr = array(
    'name' => 'corn',
    'age' => '24',
);
test_arr($arr);
function test_arr($arr){
    $arr['name'] = 'qqyumidi';
}
print_r($arr); //result: Array ( [name] => corn [age] => 24 )

js 코드는 다음과 같습니다.

var arr = new Array('corn', '24');
test_arr(arr);
function test_arr(arr){
    arr[0] = 'qqyumidi';
}
console.log(arr);  //result:["qqyumidi", "24"]

PHP에서 값 전송을 위해 참조 전송 효과를 사용해야 하는 경우 형식 매개변수 앞에 주소 문자 &를 추가하면 됩니다. .

$aa = 100;
test_vars($aa);
function test_vars(&$aa){
    $aa = 200;
}
print_r($aa);   //result: 200

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP 배열은 참조 유형입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.