⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 language.references.whatdo.html

📁 php的帮助文档,涉及到PHP的案例和基本语法,以及实际应用内容
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title>What References Do</title>  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.references.html">References Explained</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.references.arent.html">What References Are Not</a></div> <div class="up"><a href="language.references.html">References Explained</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div><hr /><div id="language.references.whatdo" class="sect1">   <h2 class="title">What References Do</h2>   <p class="para">    PHP references allow you to make two variables to refer to the    same content. Meaning, when you do:    <div class="informalexample">     <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a&nbsp;</span><span style="color: #007700">=&amp;&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>     </div>    </div>    it means that <var class="varname">$a</var> and <var class="varname">$b</var>    point to the same content.    <blockquote><p><b class="note">Note</b>:            <var class="varname">$a</var> and <var class="varname">$b</var> are completely      equal here, that&#039;s not <var class="varname">$a</var> is pointing to      <var class="varname">$b</var> or vice versa, that&#039;s      <var class="varname">$a</var> and <var class="varname">$b</var> pointing to the      same place.     <br />    </p></blockquote>   </p>   <blockquote><p><b class="note">Note</b>:          If array with references is copied, its values are not dereferenced.     This is valid also for arrays passed by value to functions.    <br />   </p></blockquote>   <blockquote><p><b class="note">Note</b>:         If you assign, pass or return an undefined variable by reference,     it will get created.     <div class="example">      <p><b>Example #1 Using references with undefined variables</b></p>      <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">)&nbsp;{&nbsp;}<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;$a&nbsp;is&nbsp;"created"&nbsp;and&nbsp;assigned&nbsp;to&nbsp;null<br /><br /></span><span style="color: #0000BB">$b&nbsp;</span><span style="color: #007700">=&nbsp;array();<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #DD0000">'b'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;bool(true)<br /><br /></span><span style="color: #0000BB">$c&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">StdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">d</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">property_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'d'</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;bool(true)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>      </div>     </div>    <br />   </p></blockquote>   <p class="para">   The same syntax can be used with functions, that return references,   and with <i>new</i> operator (in PHP 4.0.4 and later):    <div class="informalexample">     <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$bar&nbsp;</span><span style="color: #007700">=&amp;&nbsp;new&nbsp;</span><span style="color: #0000BB">fooclass</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$foo&nbsp;</span><span style="color: #007700">=&amp;&nbsp;</span><span style="color: #0000BB">find_var</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>     </div>    </div>    Since PHP 5, <a href="language.oop5.basic.html#language.oop5.basic.new" class="link">new</a> return    reference automatically so using <i>=&amp;</i> in this    context is deprecated and produces E_STRICT level message.   </p>    <blockquote><p><b class="note">Note</b>:           Not using the <i>&amp;</i> operator causes a copy of the     object to be made. If you use <i>$this</i> in the class it     will operate on the current instance of the class. The assignment without     <i>&amp;</i> will copy the instance (i.e. the object) and     <i>$this</i> will operate on the copy, which is not always     what is desired. Usually you want to have a single instance to work with,     due to performance and memory consumption issues.     <br />           While you can use the <i>@</i> operator to      <em class="emphasis">mute</em> any errors in the constructor when using it as      <i>@new</i>, this does not work when using the      <i>&amp;new</i> statement. This is a limitation of the Zend      Engine and will therefore result in a parser error.     <br />   </p></blockquote>   <div class="warning"><b class="warning">Warning</b>    <p class="para">     If you assign a reference to a variable declared <i>global</i>     inside a function, the reference will be visible only inside the function.     You can avoid this by using the <var class="varname"><a href="reserved.variables.globals.html" class="classname">$GLOBALS</a></var> array.     <div class="example">      <p><b>Example #2 Referencing global variables inside function</b></p>      <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$var1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Example&nbsp;variable"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$var2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br /><br />function&nbsp;</span><span style="color: #0000BB">global_references</span><span style="color: #007700">(</span><span style="color: #0000BB">$use_globals</span><span style="color: #007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;</span><span style="color: #0000BB">$var1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$var2</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!</span><span style="color: #0000BB">$use_globals</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$var2&nbsp;</span><span style="color: #007700">=&amp;&nbsp;</span><span style="color: #0000BB">$var1</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;visible&nbsp;only&nbsp;inside&nbsp;the&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">"var2"</span><span style="color: #007700">]&nbsp;=&amp;&nbsp;</span><span style="color: #0000BB">$var1</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;visible&nbsp;also&nbsp;in&nbsp;global&nbsp;context<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />}<br /><br /></span><span style="color: #0000BB">global_references</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #DD0000">"var2&nbsp;is&nbsp;set&nbsp;to&nbsp;'$var2'\n"</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;var2&nbsp;is&nbsp;set&nbsp;to&nbsp;''<br /></span><span style="color: #0000BB">global_references</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #DD0000">"var2&nbsp;is&nbsp;set&nbsp;to&nbsp;'$var2'\n"</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;var2&nbsp;is&nbsp;set&nbsp;to&nbsp;'Example&nbsp;variable'<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>      </div>     </div>     Think about <i>global $var;</i> as a shortcut to <i>$var     =&amp; $GLOBALS[&#039;var&#039;];</i>. Thus assigning other reference     to <i>$var</i> only changes the local variable&#039;s reference.    </p>   </div>   <blockquote><p><b class="note">Note</b>:          If you assign a value to a variable with references in a <a href="control-structures.foreach.html" class="link">foreach</a> statement,     the references are modified too.     <div class="example">      <p><b>Example #3 References and foreach statement</b></p>      <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$ref&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$row&nbsp;</span><span style="color: #007700">=&amp;&nbsp;</span><span style="color: #0000BB">$ref</span><span style="color: #007700">;<br />foreach&nbsp;(array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">)&nbsp;as&nbsp;</span><span style="color: #0000BB">$row</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;do&nbsp;something<br /></span><span style="color: #007700">}<br />echo&nbsp;</span><span style="color: #0000BB">$ref</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;3&nbsp;-&nbsp;last&nbsp;element&nbsp;of&nbsp;the&nbsp;iterated&nbsp;array<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>      </div>     </div>    <br />   </p></blockquote>   <p class="para">    The second thing references do is to pass variables    by-reference. This is done by making a local variable in a function and    a variable in the calling scope reference to the same content. Example:    <div class="informalexample">     <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$var</span><span style="color: #007700">++;<br />}<br /><br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>     </div>    </div>    will make <var class="varname">$a</var> to be 6. This happens because in    the function <var class="varname">foo</var> the variable    <var class="varname">$var</var> refers to the same content as    <var class="varname">$a</var>. See also more detailed explanations about <a href="language.references.pass.html" class="link">passing by reference</a>.   </p>   <p class="simpara">    The third thing reference can do is <a href="language.references.return.html" class="link">return by reference</a>.   </p>  </div><hr /><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.references.html">References Explained</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.references.arent.html">What References Are Not</a></div> <div class="up"><a href="language.references.html">References Explained</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -