php reference (that is, adding the & symbol in front of a variable, function, object, etc.), the reference in PHP means: 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="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?>
2. Function reference transfer (call by address)
I won’t go into details about call by address. The code will be given directly below.
<?php function test(&$a) { $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101 ?>
It should be noted that if test(1); is used here, an error will occur. You should think about the reason yourself.
Note: Do not add the & symbol in front of $b in the above "test($b);", but in the function "call_user_func_array", if you want to refer to the parameters, you need the & symbol, as shown in the following code:
<?php function a(&$b){ $b++; } $c=0; call_user_func_array('a',array(&$c)); echo $c; //输出 1 ?>
3. Function reference return
Look at the code first
<?php 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 ?>
Explain below:
In this way $a=test(); what you get is not actually a function Reference return is no different from ordinary function calls. The reason is: This is the regulation of PHP
PHP stipulates that the function's reference return is obtained through $a=&test();
As for what is reference return? (The PHP manual says: Reference return is used when you want to use a function to find which variable the reference should be bound to.) This nonsense made me unable to understand it for a long time
4. Object reference
<?php class a{ var $abc="ABC"; } $b=new a; $c=$b; echo $b->abc;//这里输出ABC echo $c->abc;//这里输出ABC $b->abc="DEF"; echo $c->abc;//这里输出DEF ?>
The above code is the running effect in PHP5
In PHP5, the assignment of objects is a reference process. In the above column, $b=new a; $c=$b; is actually equivalent to $b=new a; $c=&$b;
The default in PHP5 is to call the object by reference, but sometimes you may want to Create a copy of an object and hope that changes to the original object will not affect the copy. For this purpose, PHP5 defines a special method called __clone.
As of PHP 5, new automatically returns a reference, so using =& here is obsolete and produces an E_STRICT level message.
In php4, object assignment is a copy process,
For example: $b=new a, where new a produces an anonymous a object instance, and $b at this time is for this anonymous object copy. In the same way, $c=$b is also a copy of the content of $b. Therefore, in php4, in order to save memory space, $b=new a will generally be changed to the reference mode, that is, $b=& new a.
5. The role of references
If the program is relatively large, there are many variables referencing the same object, and you want to manually clear the object after using it, I personally recommend using the "&" method, and then $ Clear with var=null. Otherwise, use the default method of php5. In addition, for the transfer of large arrays in php5, it is recommended to use the "&" method, after all, it saves memory space.
6. Unreference
When you unset a reference, you just break the binding between the variable name and the variable content. This does not mean that the variable contents are destroyed. For example:
<?php $a = 1; $b =& $a; unset ($a); ?>
will not unset $b, just $a.
7.global reference
When declaring a variable with global $var, a reference to the global variable is actually established. That is the same as doing:
<?php $var =& $GLOBALS["var"]; ?>
This means that, for example, unset $var will not unset a global variable.
If a reference is assigned to a variable declared as global inside a function, the reference is only visible inside the function. This can be avoided by using the $GLOBALS array.
Example Reference global variables within a function
<?php $var1 = "Example variable"; $var2 = ""; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 =& $var1; // visible only inside the function } else { $GLOBALS["var2"] =& $var1; // visible also in global context } } global_references(false); echo "var2 is set to '$var2'\n"; // var2 is set to '' global_references(true); echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable' ?>
Treat global $var; as the abbreviation of $var =& $GLOBALS['var'];. Thus assigning another reference to $var only changes the reference to the local variable.
The above is the detailed content of Summary of several usage examples quoted by php. For more information, please follow other related articles on the PHP Chinese website!