이 글에서는 PHP의 참조를 이해하고 함수의 참조 전달 및 참조 반환을 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
PHP 참조(즉, 변수, 함수, 객체 등 앞에 앰퍼샌드를 추가하는 것)
PHP에서 참조는 서로 다른 이름이 동일한 변수 콘텐츠에 액세스한다는 의미입니다.
C 언어의 포인터와는 차이가 있습니다. C 언어의 포인터는 변수의 내용과 메모리에 저장된 주소를 저장합니다.
1. 변수 참조
PHP의 참조를 사용하면 두 개의 변수를 사용하여 동일한 내용을 가리킬 수 있습니다
<?php $a = 'abc'; $b = &$a; var_dump($a,$b);//均为'abc' $b = 123; var_dump($a,$b);//均为123
2. 함수 참조 전달(주소별 호출)
<?php function test(&$a){ $a = $a + 100; } $b = 1; test($b); var_dump($b);//101
여기서 $b는 함수에 전달됩니다. 실제로는 $b의 변수 내용이 위치한 메모리 주소입니다. 함수에서 $a의 값을 변경하면 $b의 값이 변경될 수 있습니다.
참고:
위의 " test($ b) " $b 앞에 & 기호를 추가하지 마세요. 하지만 "call_user_func_array" 함수에서 매개변수를 참조로 전달하려면 & 기호
<?php function test(&$a){ $a = $a + 10; } $b = 1; call_user_func_array('test',array(&$b)); var_dump($b);//11
3이 필요합니다.
function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出 $b的值 为1 $a=5; $a=test();//这条语句会输出 $b的值 为2 $a=&test();//这条语句会输出 $b的值 为3 $a=5; $a=test();//这条语句会输出 $b的值 为6
이런 식으로 $a= test();는 실제로 함수 참조 반환을 얻지 못하며 이는 일반 함수 호출과 다르지 않습니다. $a=test() 메소드에서 함수를 호출하면 함수 값이 $a에만 할당되며 $a에 대한 변경 사항은 $a=&test(에서 함수를 호출하는 것은 어떻습니까? ) 메소드? 그 기능은 $b를 반환할 때 $b 변수의 메모리 주소를 $a 변수의 메모리 주소와 동일한 위치로 가리키는 것입니다.
여기서 정적 변수는 모든 사람이 함수의 참조 반환을 이해할 수 있도록 사용됩니다. 실제로 함수의 참조 반환은 객체에서 주로 사용됩니다.
class talker{ private $data = 'Hi'; public function &get(){ return $this->data; } public function out(){ echo $this->data; } } $aa = new talker(); $d = &$aa->get(); $aa->out(); $d = 'How'; $aa->out(); $d = 'Are'; $aa->out(); $d = 'You'; $aa->out(); //输出为HiHowAreYou
권장 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP의 참조 전달 및 함수 반환에 대한 자세한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!