Home >Backend Development >PHP Tutorial >Detailed explanation of reference passing and return of functions in PHP (with code)

Detailed explanation of reference passing and return of functions in PHP (with code)

青灯夜游
青灯夜游forward
2021-04-02 18:16:543329browse

This article will take you to understand the references of PHP and introduce in detail the reference passing and reference return of functions. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

Detailed explanation of reference passing and return of functions in PHP (with code)

Reference to php (that is, adding an ampersand in front of a variable, function, object, etc.)

Referenced in PHP Meaning: different names access the same variable content.
It is different from pointers in C language. The pointer in C language stores the content of the variable and the address stored in the memory.

1. Variable reference

PHP reference allows you to use two variables to point to the same content

<?php
    $a = &#39;abc&#39;;
    $b = &$a;
    var_dump($a,$b);//均为&#39;abc&#39;
    $b = 123;
    var_dump($a,$b);//均为123

2. Function Pass by reference (call by address)

<?php
    function test(&$a){
        $a = $a + 100;
    }
    $b = 1;
    test($b);
    var_dump($b);//101

What $b passes to the function is actually the memory address where the variable content of $b is located, which can be changed by changing the value of $a in the function. Value of $b

Note:

Do not add the ampersand in front of $b in the above "test($b);", but in the function In "call_user_func_array", if you want to pass parameters by reference, you need the & symbol

<?php
    function test(&$a){
        $a = $a + 10;
    }
    $b = 1;
    call_user_func_array(&#39;test&#39;,array(&$b));
    var_dump($b);//11

3. The reference of the function returns

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

In this way$ What a=test(); actually gets is not a function reference return, which is no different from an ordinary function call. Calling a function in the $a=test() method only assigns the value of the function to $a, and any changes to $a will not affect $b in the function. How about calling the function in the $a=&test() method? Its function is to point the memory address of the $b variable in return $b to the same place as the memory address of the $a variable.

Static variables are used here to let everyone understand the reference return of the function. In fact, the reference return of the function is mostly used in objects:

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

Recommended learning: "PHP Video Tutorial

The above is the detailed content of Detailed explanation of reference passing and return of functions in PHP (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete