<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>What References Are Not</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.references.whatdo.html">What References Do</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.references.pass.html">Passing by Reference</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.arent" class="sect1"> <h2 class="title">What References Are Not</h2> <p class="para"> As said before, references are not pointers. That means, the following construct won't do what you expect: <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">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(&</span><span style="color: #0000BB">$var</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #0000BB">$var </span><span style="color: #007700">=& </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">"baz"</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">); <br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="simpara"> What happens is that <var class="varname"><var class="varname">$var</var></var> in <var class="varname"><var class="varname">foo</var></var> will be bound with <var class="varname"><var class="varname">$bar</var></var> in the caller, but then re-bound with <var class="varname"><var class="varname"><a href="reserved.variables.globals.html" class="classname">$GLOBALS["baz"]</a></var></var>. There's no way to bind <var class="varname"><var class="varname">$bar</var></var> in the calling scope to something else using the reference mechanism, since <var class="varname"><var class="varname">$bar</var></var> is not available in the function <var class="varname"><var class="varname">foo</var></var> (it is represented by <var class="varname"><var class="varname">$var</var></var>, but <var class="varname"><var class="varname">$var</var></var> has only variable contents and not name-to-value binding in the calling symbol table). You can use <a href="language.references.return.html" class="link">returning references</a> to reference variables selected by the function. </p> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.references.whatdo.html">What References Do</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.references.pass.html">Passing by Reference</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>