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