language.oop.newref.html

来自「php的帮助文档,涉及到PHP的案例和基本语法,以及实际应用内容」· HTML 代码 · 共 106 行 · 第 1/2 页

HTML
106
字号
      There is no performance loss (since PHP 4 and up use reference      counting) returning copies instead of references. On the      contrary it is most often better to simply work with copies      instead of references, because creating references takes some      time where creating copies virtually takes no time (unless none      of them is a large array or object and one of them gets changed      and the other(s) one(s) subsequently, then it would be wise to      use references to change them all concurrently).     </span>    </p></blockquote>    To prove what is written above let us watch the code below.    <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: #FF8000">//&nbsp;now&nbsp;we&nbsp;will&nbsp;change&nbsp;the&nbsp;name.&nbsp;what&nbsp;do&nbsp;you&nbsp;expect?<br />//&nbsp;you&nbsp;could&nbsp;expect&nbsp;that&nbsp;both&nbsp;$bar1&nbsp;and&nbsp;$globalref[0]&nbsp;change&nbsp;their&nbsp;names...<br /></span><span style="color: #0000BB">$bar1</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setName</span><span style="color: #007700">(</span><span style="color: #DD0000">'set&nbsp;from&nbsp;outside'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;as&nbsp;mentioned&nbsp;before&nbsp;this&nbsp;is&nbsp;not&nbsp;the&nbsp;case.<br /></span><span style="color: #0000BB">$bar1</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$globalref</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/*&nbsp;output:<br />set&nbsp;from&nbsp;outside<br />set&nbsp;in&nbsp;constructor&nbsp;*/<br /><br />//&nbsp;let&nbsp;us&nbsp;see&nbsp;what&nbsp;is&nbsp;different&nbsp;with&nbsp;$bar2&nbsp;and&nbsp;$globalref[1]<br /></span><span style="color: #0000BB">$bar2</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setName</span><span style="color: #007700">(</span><span style="color: #DD0000">'set&nbsp;from&nbsp;outside'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;luckily&nbsp;they&nbsp;are&nbsp;not&nbsp;only&nbsp;equal,&nbsp;they&nbsp;are&nbsp;the&nbsp;same&nbsp;variable<br />//&nbsp;thus&nbsp;$bar2-&gt;name&nbsp;and&nbsp;$globalref[1]-&gt;name&nbsp;are&nbsp;the&nbsp;same&nbsp;too<br /></span><span style="color: #0000BB">$bar2</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$globalref</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/*&nbsp;output:<br />set&nbsp;from&nbsp;outside<br />set&nbsp;from&nbsp;outside&nbsp;*/<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>     </div>    </div>      </p>      <p class="para">   Another final example, try to understand it.       <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">class&nbsp;</span><span style="color: #0000BB">A&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;try&nbsp;to&nbsp;figure&nbsp;out&nbsp;why&nbsp;we&nbsp;do&nbsp;not&nbsp;need&nbsp;a&nbsp;reference&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">b&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">createRef</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">c&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">,</span><span style="color: #DD0000">"class&nbsp;"</span><span style="color: #007700">,</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">),</span><span style="color: #DD0000">':&nbsp;'</span><span style="color: #007700">,</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />class&nbsp;</span><span style="color: #0000BB">B&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">a&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">,</span><span style="color: #DD0000">"class&nbsp;"</span><span style="color: #007700">,</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">),</span><span style="color: #DD0000">':&nbsp;'</span><span style="color: #007700">,</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #FF8000">//&nbsp;try&nbsp;to&nbsp;understand&nbsp;why&nbsp;using&nbsp;a&nbsp;simple&nbsp;copy&nbsp;here&nbsp;would&nbsp;yield<br />//&nbsp;in&nbsp;an&nbsp;undesired&nbsp;result&nbsp;in&nbsp;the&nbsp;*-marked&nbsp;line<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&amp;&nbsp;new&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">(</span><span style="color: #0000BB">10</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">createRef</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">b</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">c</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">b</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;*<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">c</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">echoValue</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>     </div>     <p class="para">The above example will output:</p>     <div class="example-contents"><pre><div class="cdata"><pre>class A: 10class B: 10class B: 10class A: 11class B: 11class B: 11</pre></div>     </pre></div>    </div>   </p>  </div><hr /><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop.magic-functions.html">The magic functions __sleep and __wakeup</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop.object-comparison.html">Comparing objects</a></div> <div class="up"><a href="language.oop.html">Classes and Objects (PHP 4)</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div></body></html>

⌨️ 快捷键说明

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