Home >Backend Development >PHP Tutorial >Discuss some issues to pay attention to when referencing the & symbol in PHP_PHP Tutorial

Discuss some issues to pay attention to when referencing the & symbol in PHP_PHP Tutorial

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-13 17:19:06693browse

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.

  • How to use PHP associative array to query results
  • Specific ways to correct common PHP errors
  • The specific method of querying a single component using the PHP function header()
  • WordPress won the second place in the 2009 Open Source PHP Project
  • Relation between converting PHP array to string and converting PHP string to array
Many people misunderstand that references in PHP are the same as pointers in C. In fact, they are not, and they are very different. Except for the pointers in C language that do not need to be explicitly declared during the array transfer process, other points need to be defined using *. However, in PHP, the function of pointing to an address (similar to a pointer) is not implemented by the user himself, but is implemented by the Zend core. , the PHP reference & symbol uses the principle of "copy-on-write", that is, unless a write operation occurs, variables or objects pointing to the same address will not be copied, such as the following code:

<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%.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/588674.htmlTechArticlePHP reference symbols are a difficult knowledge point to master. Novices must pay more attention to this when actually writing code, because if you misunderstand the use of PHP reference symbols, it will lead to...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn