Home >Backend Development >PHP Tutorial >Discuss some issues to pay attention to when referencing the & symbol in PHP_PHP Tutorial
PHP reference & symbol is a difficult knowledge point to master. Novices must pay more attention to this when actually writing code, because if you misunderstand the use of the PHP reference & symbol, it will cause errors in the entire code you write.
<ol class="dp-xml"> <li class="alt"><span><span>$</span><span class="attribute"><font color="#ff0000">a</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">array</font></span><span>('a','c'...'n'); </span></span></li> <li class=""> <span>$</span><span class="attribute"><font color="#ff0000">b</font></span><span> = $a; </span> </li> </ol>
If the program only executes here, $b and $b are the same, but they do not occupy different memory spaces like C. Instead, they point to the same memory space. This is php and c. The difference is that you don’t need to write $b=&$a to mean that $b points to the memory of $a. zend has already implemented the reference for you, and zend will be very smart to help you judge when to do this and when. It shouldn't be handled this way.
If you continue to write the following code later, add a function, pass parameters through PHP reference & symbol, and print out the array size.
<ol class="dp-xml"> <li class="alt"><span><span>function printArray(&$arr) //引用传递 </span></span></li> <li class=""><span> { </span></li> <li class="alt"><span> print(count($arr)); </span></li> <li class=""><span> } </span></li> <li class="alt"><span> </span></li> <li class=""><span> printArray($a); </span></li> </ol>
In the above code, we pass the $a array into the printArray() function through the PHP reference & symbol. The zend engine will think that printArray() may cause changes to $a, and it will automatically produce $b at this time. A data copy of $a, re-applying for a piece of memory for storage. This is the "copy-on-write" concept mentioned earlier.
If we change the above code to the following:
<ol class="dp-xml"> <li class="alt"><span><span>function printArray($arr) //值传递 </span></span></li> <li class=""><span> { </span></li> <li class="alt"><span> print(count($arr)); </span></li> <li class=""><span> } </span></li> <li class="alt"><span> </span></li> <li class=""><span> printArray($a); </span></li> </ol>
The above code directly passes the $a value to printArray(). There is no reference transfer at this time, so there is no copy-on-write.
You can test the execution efficiency of the above two lines of code. For example, add a loop outside 1000 times and see how long it takes to run. The results will let you know that incorrect use of the PHP reference & symbol will cause performance to drop by more than 30%.