>백엔드 개발 >PHP 튜토리얼 >PHP의 참조 전달 및 함수 반환에 대한 자세한 설명(코드 포함)

PHP의 참조 전달 및 함수 반환에 대한 자세한 설명(코드 포함)

青灯夜游
青灯夜游앞으로
2021-04-02 18:16:543329검색

이 글에서는 PHP의 참조를 이해하고 함수의 참조 전달 및 참조 반환을 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP의 참조 전달 및 함수 반환에 대한 자세한 설명(코드 포함)

PHP 참조(즉, 변수, 함수, 객체 등 앞에 앰퍼샌드를 추가하는 것)

PHP에서 참조는 서로 다른 이름이 동일한 변수 콘텐츠에 액세스한다는 의미입니다.
C 언어의 포인터와는 차이가 있습니다. C 언어의 포인터는 변수의 내용과 메모리에 저장된 주소를 저장합니다.

1. 변수 참조

PHP의 참조를 사용하면 두 개의 변수를 사용하여 동일한 내용을 가리킬 수 있습니다

<?php
    $a = &#39;abc&#39;;
    $b = &$a;
    var_dump($a,$b);//均为&#39;abc&#39;
    $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(&#39;test&#39;,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 = &#39;Hi&#39;;
    public function &get(){
        return $this->data;
    }
    public function out(){
        echo $this->data;
    }
}
$aa = new talker();
$d = &$aa->get();
$aa->out();
$d = &#39;How&#39;;
$aa->out();
$d = &#39;Are&#39;;
$aa->out();
$d = &#39;You&#39;;
$aa->out(); 
//输出为HiHowAreYou

권장 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP의 참조 전달 및 함수 반환에 대한 자세한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제