Needless to say, what does the ampersand sign in front of a PHP variable mean? Everyone is using it. It means that two variables point to the same address at the same time. So, what is the meaning of adding an ampersand in front of a PHP function? Below are two demonstration codes first, and then explanations.
function &chhua() { static $b="www.jb51.net";//申明一个静态变量 $b=$b."WEB开发"; echo $b; return $b; } $a=chhua();//这条语句会输出 $b的值 为“www.jb51.netWEB开发” $a="PHP"; echo "<Br>"; $a=chhua();//这条语 句会输出 $b的值 为“www.jb51.netWEB开发WEB开发” echo "<Br>"; $a=&chhua();//这条语句会输出 $b的值 为“www.jb51.netWEB开发WEB开发WEB开发” echo "<Br>"; $a="JS"; $a=chhua(); //这条语句会输出 $b的值 为"JSWEB开发" 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
Let’s explain the second function.
In this way, $a=test(); actually does not get a function reference return, which is no different from an ordinary function call.
As for the reason: This is the regulation of PHP
PHP stipulates that what is obtained through $a=&test(); is the reference return of the function.
As for what is reference return (PHP manual says: reference return is used when you want to use a function to find which variable the reference should be bound to.)
Using the above example to explain it is
Calling a function using $a=test() only assigns the value of the function to $a, and any changes to $a will not affect $b in the function.
When calling a function through $a=&test(), its function is to compare the memory address of the $b variable in return $b with the memory address of the $a variable,
Points to the same place. That is to say, the effect is equivalent to this ($a=&b;), so changing the value of $a also changes the value of $b, so after executing:
$a=&test(); $a=5; After that, the value of $b becomes 5.
@ operator is only valid for expressions. A simple rule for beginners is: if you can get a value from somewhere, prepend it with the @ operator. For example, you can put it before variables, functions and include() calls, constants, etc. It cannot be placed before the definition of a function or class, nor can it be used in conditional structures such as if and foreach.
The current "@" error control operator prefix disables even error reporting of critical errors that cause the script to terminate. This means that if you use "@" to suppress an error message before a function call that does not exist or is of the wrong type, the script will die there without any indication of the reason.
Function reference
For function reference, the main difference lies in memory performance~
function &load_message and function load_message, the first one should also be declared as a reference with &load_message when used, and the second one should be returned as a reference Just assign the result of the function to a variable. This function is generally used for recursive functions. As for citations, it is recommended that you write a few examples yourself and test them. You understand, just looking at the literal meaning is not as good as practice. At the same time, there are many examples of php references on the Internet. You can refer to it.
By the way, there is another commonly used form of reference in PHP
which is function gao(&$id) and function gao($id)
This form of reference, we Just compare the results.
function a(&$t){
$t .= 'xx';
}
function b($t){
$t .= 'yy';
}
$x = 'aa';
b($x);
echo $x; // Output aa
a($x);
echo $x; // Output aaxx
Remember that the output here is $x, not b($x) or a($x). (Sorry for borrowing the example from cosmicdusts)
----Learn from others