language.oop.newref.html
来自「php的帮助文档,涉及到PHP的案例和基本语法,以及实际应用内容」· HTML 代码 · 共 106 行 · 第 1/2 页
HTML
106 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <title>References inside the constructor</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.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><hr /><div id="language.oop.newref" class="sect1"> <h2 class="title">References inside the constructor</h2> <p class="para"> Creating references within the constructor can lead to confusing results. This tutorial-like section helps you to avoid problems. <div class="informalexample"> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br /> function </span><span style="color: #0000BB">Foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) {<br /> </span><span style="color: #FF8000">// create a reference inside the global array $globalref<br /> </span><span style="color: #007700">global </span><span style="color: #0000BB">$globalref</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$globalref</span><span style="color: #007700">[] = &</span><span style="color: #0000BB">$this</span><span style="color: #007700">;<br /> </span><span style="color: #FF8000">// set name to passed value<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">setName</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br /> </span><span style="color: #FF8000">// and put it out<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /> }<br /><br /> function </span><span style="color: #0000BB">echoName</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"<br />"</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">name</span><span style="color: #007700">;<br /> }<br /> <br /> function </span><span style="color: #0000BB">setName</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">name </span><span style="color: #007700">= </span><span style="color: #0000BB">$name</span><span style="color: #007700">;<br /> }<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> </p> <p class="para"> Let us check out if there is a difference between <var class="varname">$bar1</var> which has been created using the copy <i>=</i> operator and <var class="varname">$bar2</var> which has been created using the reference <i>=&</i> operator... <div class="informalexample"> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br />$bar1 </span><span style="color: #007700">= new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">(</span><span style="color: #DD0000">'set in constructor'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$bar1</span><span style="color: #007700">-></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">]-></span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* output:<br />set in constructor<br />set in constructor<br />set in constructor */<br /><br /></span><span style="color: #0000BB">$bar2 </span><span style="color: #007700">=& new </span><span style="color: #0000BB">Foo</span><span style="color: #007700">(</span><span style="color: #DD0000">'set in constructor'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$bar2</span><span style="color: #007700">-></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">]-></span><span style="color: #0000BB">echoName</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* output:<br />set in constructor<br />set in constructor<br />set in constructor */<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> </p> <p class="para"> Apparently there is no difference, but in fact there is a very significant one: <var class="varname">$bar1</var> and <var class="varname">$globalref[0]</var> are _NOT_ referenced, they are NOT the same variable. This is because "new" does not return a reference by default, instead it returns a copy. <blockquote><p><b class="note">Note</b>: <span class="simpara">
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?