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

青灯夜游
풀어 주다: 2023-04-09 20:48:02
앞으로
3286명이 탐색했습니다.

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

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