<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >O que as referências fazem</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Referências" HREF="language.references.html"><LINK REL="PREVIOUS" TITLE="Referências" HREF="language.references.html"><LINK REL="NEXT" TITLE="O que as referências não são" HREF="language.references.arent.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="language.references.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 21. Referências</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.references.arent.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.references.whatdo" >O que as referências fazem</A ></H1 ><P > Referências PHP permitem fazer duas variáveis se referirem ao mesmo conteúdo. Ou seja: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN6195" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$a </font><font color="#007700">=& </font><font color="#0000BB">$b<br />?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > aqui <CODE CLASS="varname" >$a</CODE > e <CODE CLASS="varname" >$b</CODE > apontam para a mesma variável. <DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > <CODE CLASS="varname" >$a</CODE > e <CODE CLASS="varname" >$b</CODE > são completamente iguais aqui, mas não porque <CODE CLASS="varname" >$a</CODE > está apontando para <CODE CLASS="varname" >$b</CODE > ou vice versa, mas sim que <CODE CLASS="varname" >$a</CODE > e <CODE CLASS="varname" >$b</CODE > apontam para o mesmo lugar. </P ></BLOCKQUOTE ></DIV > </P ><P > A mesma sintaxe pode ser utilizada com funções, que retornem referências, e com o operador <TT CLASS="literal" >new</TT > (a partir do PHP 4.0.4): <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN6209" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$bar </font><font color="#007700">=& new </font><font color="#0000BB">fooclass</font><font color="#007700">();<br /></font><font color="#0000BB">$foo </font><font color="#007700">=& </font><font color="#0000BB">find_var </font><font color="#007700">(</font><font color="#0000BB">$bar</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > A não utilização do operador <TT CLASS="literal" >&</TT > causará a cópia do objeto. Se você utiliza <TT CLASS="literal" >$this</TT > em classes, ele operará na instância atual do objeto. A assimilação sem <TT CLASS="literal" >&</TT > irá copiar a instância (o objeto em si) e <TT CLASS="literal" >$this</TT > irá operar na cópia, podendo não ser esse procedimento sempre desejável. Normalmente você precisará trabalhar com uma instância única, seja por motivos de performance ou de consumo de memória. </P ><P > Você pode utilizar o operador <TT CLASS="literal" >@</TT > para <SPAN CLASS="emphasis" ><I CLASS="emphasis" >esconder</I ></SPAN > quaisquer erros em construtores na forma <TT CLASS="literal" >@new</TT >, mas isto não funciona quando utilizada a instrução <TT CLASS="literal" >&new</TT >. Esta é uma limitação da Zend Engine e irá gerar um erro de interpretação (parser error). </P ></BLOCKQUOTE ></DIV ><P > A segunda coisa que referências permitem é passar variáveis por referência. Isto é feito marcando uma variável local de uma função e a variável do escopo chamador como referências ao mesmo conteúdo. Exemplo: <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN6223" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">function </font><font color="#0000BB">foo </font><font color="#007700">(&</font><font color="#0000BB">$var</font><font color="#007700">)<br />{<br /> </font><font color="#0000BB">$var</font><font color="#007700">++;<br />}<br /><br /></font><font color="#0000BB">$a</font><font color="#007700">=</font><font color="#0000BB">5</font><font color="#007700">;<br /></font><font color="#0000BB">foo </font><font color="#007700">(</font><font color="#0000BB">$a</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > fará que <CODE CLASS="varname" >$a</CODE > seja 6. Isto acontece porque na função <CODE CLASS="varname" >foo</CODE > a variável <CODE CLASS="varname" >$var</CODE > se refere ao mesmo conteúdo que <CODE CLASS="varname" >$a</CODE >. Veja explicações mais detalhadas em <A HREF="language.references.pass.html" >passagem por referência</A >. </P ><P > Em terceiro lugar, referências permitem também <A HREF="language.references.return.html" >retorno por referência</A >. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="language.references.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.references.arent.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Referências</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.references.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >O que as referências não são</TD ></TR ></TABLE ></DIV ></BODY ></HTML >