Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 11842

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Escopo de variáveis</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="Variáveis"
HREF="language.variables.html"><LINK
REL="PREVIOUS"
TITLE="Variáveis Predefinidas"
HREF="language.variables.predefined.html"><LINK
REL="NEXT"
TITLE="Variáveis variáveis"
HREF="language.variables.variable.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.variables.predefined.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Capítulo 12. Variáveis</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="language.variables.variable.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="language.variables.scope"
>Escopo de variáveis</A
></H1
><P
>&#13;    O escopo de uma variável é o contexto onde ela foi definida.
    A maior parte das variáveis do PHP tem somente escopo local.
    Este escopo local inclui os arquivos incluídos. Por
    exemplo:
   </P
><DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3738"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">;<br />include </font><font color="#DD0000">"b.inc"</font><font color="#007700">;<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
><P
>&#13;    Aqui a variável <CODE
CLASS="varname"
>$a</CODE
> estará disponível
    no script incluído <TT
CLASS="filename"
>b.inc</TT
>. Entretanto, com as
    funções definidas pelo usuário, um escopo local é introduzido. Quaisquer
    variáveis utilizadas dento da função é por default limitada dentro do
    escopo local da função. Por exemplo:
</P
><DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3743"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">; </font><font color="#FF8000">/* escopo global */<br /><br /></font><font color="#007700">function </font><font color="#0000BB">Teste</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$a</font><font color="#007700">; </font><font color="#FF8000">/* referencia uma variável do escopo local (não definida) */<br /></font><font color="#007700">}<br /><br /></font><font color="#0000BB">Teste</font><font color="#007700">();<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
><P
>&#13;    Este script não produz nenhuma saída porque a instrução <A
HREF="function.echo.html"
><B
CLASS="function"
>echo()</B
></A
>
    refere-se a uma versão local da variável <CODE
CLASS="varname"
>$a</CODE
>,
    e ela não tem nenhum valor assimilado nesse escopo. Essa é uma
    pequena diferença da linguagem C quando
    variáveis globais são automaticamente disponíveis para
    funções sem sobreescrever uma eventual definição local.
    Isto causa problemas quando as pessoas mudam
    inadivertidamente uma variável global. No PHP, as variáveis globais precisam ser
    declaradas globais dentro de uma função se ela vai ser utilizada
    naquela função.
   </P
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.variables.scope.global"
>A palavra chave global</A
></H2
><P
>&#13;     Primeiro, um exemplo de <TT
CLASS="literal"
>global</TT
>:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3753"
></A
><P
><B
>Exemplo 12-1. Usando global</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">;<br /></font><font color="#0000BB">$b </font><font color="#007700">= </font><font color="#0000BB">2</font><font color="#007700">;<br /><br />function </font><font color="#0000BB">Soma</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;global </font><font color="#0000BB">$a</font><font color="#007700">, </font><font color="#0000BB">$b</font><font color="#007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$b </font><font color="#007700">= </font><font color="#0000BB">$a </font><font color="#007700">+ </font><font color="#0000BB">$b</font><font color="#007700">;<br />}<br /><br /></font><font color="#0000BB">Soma</font><font color="#007700">();<br />echo </font><font color="#0000BB">$b</font><font color="#007700">;<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;    O script acima imprimirá "3". Declarando
    <CODE
CLASS="varname"
>$a</CODE
> e <CODE
CLASS="varname"
>$b</CODE
> globais na
    função, todas as referências a essas variáveis referem-se a
    versão global. Não há um limite para o número de variáveis
    globais que podem ser manipuladas por uma função.
   </P
><P
>&#13;    Uma segunda maneira de acessar variáveis do escopo global é utilizando
    o array especial <CODE
CLASS="varname"
>$GLOBALS</CODE
> definido pelo PHP. O
    exemplo anterior poderia ser rescrito como:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3762"
></A
><P
><B
>Exemplo 12-2. Usando <CODE
CLASS="varname"
>$GLOBALS</CODE
> no lugar de global</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">;<br /></font><font color="#0000BB">$b </font><font color="#007700">= </font><font color="#0000BB">2</font><font color="#007700">;<br /><br />function </font><font color="#0000BB">Soma</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$GLOBALS</font><font color="#007700">[</font><font color="#DD0000">"b"</font><font color="#007700">] = </font><font color="#0000BB">$GLOBALS</font><font color="#007700">[</font><font color="#DD0000">"a"</font><font color="#007700">] + </font><font color="#0000BB">$GLOBALS</font><font color="#007700">[</font><font color="#DD0000">"b"</font><font color="#007700">];<br />}<br /><br /></font><font color="#0000BB">Soma</font><font color="#007700">();<br />echo </font><font color="#0000BB">$b</font><font color="#007700">;<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><P
>&#13;    O array <CODE
CLASS="varname"
>$GLOBALS</CODE
> é um array associativo onde
    o nome da variável global é a chave do array e o seu conteúdo da
    variável como o valor do elemento do array.
    Veja que <CODE
CLASS="varname"
>$GLOBALS</CODE
> existe em qualquer escopo, isto
    porque $GLOBALS é uma <A
HREF="language.variables.predefined.html#language.variables.superglobals"
>superglobal</A
>.
    Segue um exemplo demonstrando o poder das superglobais:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3771"
></A
><P
><B
>Exemplo 12-3. Exemplo demonstrando superglobals e escopos</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">test_global</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// A maioria das variaveis predefinidas nao sao 'super' e requerem<br />&nbsp;&nbsp;&nbsp;&nbsp;// 'global' para serem disponiveis para funcoes em qualquer escopo.<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">global </font><font color="#0000BB">$HTTP_POST_VARS</font><font color="#007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$HTTP_POST_VARS</font><font color="#007700">[</font><font color="#DD0000">'name'</font><font color="#007700">];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Superglobais são disponiveis em qualquer escopo e<br />&nbsp;&nbsp;&nbsp;&nbsp;// nao precisam de 'global'. Superglobais existem<br />&nbsp;&nbsp;&nbsp;&nbsp;// desde o PHP 4.1.0<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">echo </font><font color="#0000BB">$_POST</font><font color="#007700">[</font><font color="#DD0000">'name'</font><font color="#007700">];<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.variables.scope.static"
>Utilizando variáveis estáticas</A
></H2
><P
>&#13;    Outro recurso importante do escopo de variáveis é a
    variável <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>estática</I
></SPAN
>. Uma variável estática existe
    somente no escopo local da função, mas ela não perde seu valor
    quando o nível de execução do programa deixa o escopo. Considere o seguinte
    exemplo:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3779"
></A
><P
><B
>Exemplo 12-4. Exemplo demonstrando a necessidade de variáveis estáticas</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">Teste </font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">0</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$a</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$a</font><font color="#007700">++;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><P
>&#13;    Essa função é inútil partindo de que cada vez que ela é chamada, ela
    coloca em <CODE
CLASS="varname"
>$a</CODE
> o valor <TT
CLASS="literal"
>0</TT
> e imprime
    "0". A instrução <CODE
CLASS="varname"
>$a</CODE
>++ , que aumenta o valor da
    variável não tem sentido desde que a função sai e a
    variável <CODE
CLASS="varname"
>$a</CODE
> desaparece. Para faze-la mais útil
    como contadora sem deixar de perder o sua conta atual,
    a variável <CODE
CLASS="varname"
>$a</CODE
> é declarada como estática:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3789"
></A
><P
><B
>Exemplo 12-5. Exemplo de uso de variáveis estáticas</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">Teste</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;static </font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#0000BB">0</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$a</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$a</font><font color="#007700">++;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><P
>&#13;    Agora, cada vez que a função Teste() for chamada ele imprimirá o
    valor de <CODE
CLASS="varname"
>$a</CODE
> e o incrementará.
   </P
><P
>&#13;    Variáveis estáticas fornecem uma solução ideal para funções
    recursivas. Uma função recursiva é aquela se chama a si mesma. Cuidados
    especiais precisam ser tomados quando escrevendo funções recursivas porque é
    possível que ela continue na recursão indefinidamente. Você tem de ter certeza
    que há uma maneira segura de terminar a recursão. A seguinte
    função recursiva conta até 10, utilizando a variável
    estática <CODE
CLASS="varname"
>$count</CODE
> para saber quando parar:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3797"
></A
><P
><B
>Exemplo 12-6. Variáveis estáticas em funções recursivas</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">Teste</font><font color="#007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;static </font><font color="#0000BB">$count </font><font color="#007700">= </font><font color="#0000BB">0</font><font color="#007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$count</font><font color="#007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$count</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;if (</font><font color="#0000BB">$count </font><font color="#007700">&lt; </font><font color="#0000BB">10</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">Test </font><font color="#007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$count</font><font color="#007700">--;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
       Variáveis estáticas podem ser declaradas como nos exemplos acima.
       A tentativa de assimilar valores para essas variáveis com
       resultados de expressões causarão um erro de interpretação (parse).
     </P
><P
>&#13;      <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN3803"
></A
><P
><B
>Exemplo 12-7. Declarando variáveis static</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">foo</font><font color="#007700">(){<br />&nbsp;&nbsp;&nbsp;&nbsp;static </font><font color="#0000BB">$int </font><font color="#007700">= </font><font color="#0000BB">0</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// correro<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">static </font><font color="#0000BB">$int </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">+</font><font color="#0000BB">2</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// errado (é uma expressão)<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">static </font><font color="#0000BB">$int </font><font color="#007700">= </font><font color="#0000BB">sqrt</font><font color="#007700">(</font><font color="#0000BB">121</font><font color="#007700">);&nbsp;&nbsp;</font><font color="#FF8000">// wrong&nbsp;&nbsp;(é uma expressão também)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$int</font><font color="#007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#0000BB">$int</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
></BLOCKQUOTE
></DIV
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.variables.scope.references"
>Referencias em variáveis globais e estáticas</A
></H2
><P
>&#13;    A Zend Engine 1, base do <TT
CLASS="literal"
>PHP 4</TT
>, implementa os modificadores
    <A
HREF="language.variables.scope.html#language.variables.scope.static"
>static</A
> e
    <A
HREF="language.variables.scope.html#language.variables.scope.global"
>global</A
>
    para variáveis na questão de <A
HREF="language.references.html"
>&#13;    referências</A
>. Por exemplo, uma veriável global
    importada dentro do escopo de uma função com a instrução <TT
CLASS="literal"
>global</TT
>
    atualmente cria uma referência para a variável global. Isto pode causar
    comportamentos impresíveis para os seguintes casos:
   </P
><DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3814"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">test_global_ref</font><font color="#007700">() {<br />&nbsp;&nbsp;&nbsp;&nbsp;global </font><font color="#0000BB">$obj</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj </font><font color="#007700">= &amp;new </font><font color="#0000BB">stdclass</font><font color="#007700">;<br />}<br /><br />function </font><font color="#0000BB">test_global_noref</font><font color="#007700">() {<br />&nbsp;&nbsp;&nbsp;&nbsp;global </font><font color="#0000BB">$obj</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj </font><font color="#007700">= new </font><font color="#0000BB">stdclass</font><font color="#007700">;<br />}<br /><br /></font><font color="#0000BB">test_global_ref</font><font color="#007700">();<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$obj</font><font color="#007700">);<br /></font><font color="#0000BB">test_global_noref</font><font color="#007700">();<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$obj</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
><P
>&#13;    Executando esse exemplo você terá as seguites saídas:
   </P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>NULL
object(stdClass)(0) {
}</PRE
></TD
></TR
></TABLE
><P
>&#13;    Uma situação similar se aplica ao modificador <TT
CLASS="literal"
>static</TT
>.
    Referências não são armazenadas estaticamente:
   </P
><DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3820"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function &amp;</font><font color="#0000BB">get_instance_ref</font><font color="#007700">() {<br />&nbsp;&nbsp;&nbsp;&nbsp;static </font><font color="#0000BB">$obj</font><font color="#007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Objeto estatico: "</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$obj</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (!isset(</font><font color="#0000BB">$obj</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Assimila uma referencia a variavel estatica<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj </font><font color="#007700">= &amp;new </font><font color="#0000BB">stdclass</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj</font><font color="#007700">-&gt;</font><font color="#0000BB">property</font><font color="#007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#0000BB">$obj</font><font color="#007700">;<br />}<br /><br />function &amp;</font><font color="#0000BB">get_instance_noref</font><font color="#007700">() {<br />&nbsp;&nbsp;&nbsp;&nbsp;static </font><font color="#0000BB">$obj</font><font color="#007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Objeto estatico: "</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$obj</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (!isset(</font><font color="#0000BB">$obj</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// Assimila o objeto para a veriavel estatica<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj </font><font color="#007700">= new </font><font color="#0000BB">stdclass</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$obj</font><font color="#007700">-&gt;</font><font color="#0000BB">property</font><font color="#007700">++;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#0000BB">$obj</font><font color="#007700">;<br />}<br /><br /></font><font color="#0000BB">$obj1 </font><font color="#007700">= </font><font color="#0000BB">get_instance_ref</font><font color="#007700">();<br /></font><font color="#0000BB">$still_obj1 </font><font color="#007700">= </font><font color="#0000BB">get_instance_ref</font><font color="#007700">();<br />echo </font><font color="#DD0000">"\n"</font><font color="#007700">;<br /></font><font color="#0000BB">$obj2 </font><font color="#007700">= </font><font color="#0000BB">get_instance_noref</font><font color="#007700">();<br /></font><font color="#0000BB">$still_obj2 </font><font color="#007700">= </font><font color="#0000BB">get_instance_noref</font><font color="#007700">();<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
><P
>&#13;    Executando esse exemplo você terá as seguites saídas:
   </P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Objeto estatico: NULL
Objeto estatico: NULL

Objeto estatico: NULL
Objeto estatico: object(stdClass)(1) {
  ["property"]=&#62;
  int(1)
}</PRE
></TD
></TR
></TABLE
><P
>&#13;    Este exemplo demonstra que quando assimilando uma referência para uma variável
    estática, ela <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>não se lembra</I
></SPAN
> quando você chama a função
    <TT
CLASS="literal"
>&#38;get_instance_ref()</TT
> uma segunda vez.
   </P
></DIV
></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.variables.predefined.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.variables.variable.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Variáveis Predefinidas</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="language.variables.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Variáveis variáveis</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>