<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.variables.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.variables.scope.php',
    1 => 'Escopo de vari&aacute;veis',
    2 => 'Escopo de vari&aacute;veis',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Vari&aacute;veis',
  ),
  'prev' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => 'Vari&aacute;veis Predefinidas',
  ),
  'next' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Vari&aacute;veis vari&aacute;veis',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'language/variables.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.variables.scope" class="sect1">
   <h2 class="title">Escopo de variáveis</h2>

   <p class="simpara">
    O escopo de uma variável é o contexto onde ela está definida.
    O PHP tem um escopo de função e um escopo global.
    Qualquer variável definida fora de uma função está limitada ao escopo global.
    Quando um arquivo é incluído, o código que ele contém herda o escopo da variável
    da linha na qual a inclusão ocorre.
   </p>
   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Exemplo de escopo global de variável</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'b.inc'</span><span style="color: #007700">; </span><span style="color: #FF8000">// Variável $a estará disponível dentro de b.inc<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    Qualquer variável criada dentro de uma função nomeada ou de
    uma função <a href="functions.anonymous.php" class="link">anônima</a>
    é limitada ao escopo do corpo da função.
    Entretanto, <a href="functions.arrow.php" class="link">funções de seta</a>
    vinculam variáveis ​​do escopo pai para disponibilizá-las dentro do corpo.
    Se uma inclusão de arquivo ocorrer dentro de uma função dentro
    do arquivo chamador, as variáveis ​​contidas no arquivo chamado estarão
    disponíveis como se tivessem sido definidas dentro da função chamadora.
   </p>

   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Exemplo de escopo local de variável</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #FF8000">// escopo global<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">()<br />{<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">; </span><span style="color: #FF8000">// Variável $a é indefinida já que refere-se a uma versão local de $a<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    O exemplo acima irá gerar um <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> de variável indefinida
    (ou um <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> antes do PHP 8.0.0).
    Isto acontece porque a instrução echo
    refere-se a uma versão local da variável <var class="varname">$a</var>,
    e não possui nenhum valor atribuído neste escopo. Pode-se
    perceber que esta é uma pequena diferença em relação à linguagem C, em que
    variáveis globais estão automaticamente disponíveis para
    funções a menos que tenham sido substituídas por uma definição local.
    Isto pode causar problemas quando uma variável
    global for inadvertidamente modificada. No PHP, as variáveis globais precisam ser
    declaradas como globais dentro de uma função, se elas precisarem ser utilizadas
    na função.
   </p>

   <div class="sect2" id="language.variables.scope.global">
    <h3 class="title">A palavra-chave <code class="literal">global</code></h3>
    <p class="simpara">
     A palavra-chave <code class="literal">global</code> é usada para vincular uma variável
     de um escopo global a um escopo local. A palavra-chave pode ser usada com
     uma lista de variáveis ​​ou com uma única variável. Uma variável local será criada
     referenciando a variável global de mesmo nome. Se a variável global
     não existir, a variável será criada no escopo global e
     receberá o valor <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
    </p>
    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Exemplo #3 Usando <code class="literal">global</code></strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">Soma</span><span style="color: #007700">()<br />{<br />    global </span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">Soma</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3
</pre></div>
      </div>
     </div>
    </p>

   <p class="simpara">
    Declarar
    <var class="varname">$a</var> e <var class="varname">$b</var> como globais na
    função fará com que todas as referências a essas variáveis refiram-se às
    versões globais. Não há um limite para o número de variáveis
    globais que podem ser manipuladas por uma função.
   </p>

   <p class="simpara">
    Uma segunda maneira de acessar variáveis do escopo global é utilizando
    o array especial <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> definido pelo PHP. O
    exemplo anterior poderia ser reescrito como:
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Exemplo #4 Usando <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> no lugar de global</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">Soma</span><span style="color: #007700">()<br />{<br />    </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">] = </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'a'</span><span style="color: #007700">] + </span><span style="color: #0000BB">$GLOBALS</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">];<br />}<br /><br /></span><span style="color: #0000BB">Soma</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$b</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="simpara">
    O array <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> é um array associativo, com
    o nome da variável global na chave e o conteúdo dessa
    variável no valor do elemento do array.
    Veja que <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> existe em qualquer escopo, isto
    porque <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> é uma <a href="language.variables.superglobals.php" class="link">superglobal</a>.
    Eis um exemplo demonstrando o poder das superglobais:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Exemplo #5 Exemplo demonstrando superglobals e escopos</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test_superglobal</span><span style="color: #007700">()<br />{<br />    echo </span><span style="color: #0000BB">$_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'name'</span><span style="color: #007700">];<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Utilizar a instrução <code class="literal">global</code> fora de uma função não é
     um erro. Pode ser utilizado se o arquivo for incluído de dentro de uma função.
    </span>
   </p></blockquote>
  </div>

  <div class="sect2" id="language.variables.scope.static">
   <h3 class="title">Utilizando variáveis <code class="literal">static</code></h3>
   <p class="simpara">
    Outro recurso importante do escopo de variáveis é a
    variável <em>estática</em>. Uma variável estática existe
    somente no escopo local da função, mas não perde seu valor
    quando a execução do programa deixa o escopo. Considere o seguinte
    exemplo:
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Exemplo #6 Exemplo demonstrando a necessidade de variáveis estáticas</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">Teste</span><span style="color: #007700">()<br />{<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Essa função é inútil, já que cada vez que é chamada, define
    <var class="varname">$a</var> com o valor <code class="literal">0</code>, e exibe
    <code class="literal">0</code>. A instrução <var class="varname">$a</var>++ , que aumenta o valor da
    variável, não tem sentido já que assim que a função termina, a
    variável <var class="varname">$a</var> desaparece. Para fazer um função
    de contagem útil, que não perderá a contagem atual,
    a variável <var class="varname">$a</var> será declarada como estática:
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Exemplo #7 Exemplo de uso de variáveis estáticas</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">Teste</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$a</span><span style="color: #007700">++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Agora, a variável <var class="varname">$a</var> é inicializada apenas na primeira chamada da função
    e cada vez que a função <code class="literal">test()</code> for chamada, exibirá o
    valor de <var class="varname">$a</var> e depois o incrementará.
   </p>

   <p class="simpara">
    Variáveis estáticas fornecem uma solução para lidar com funções
    recursivas. A seguinte
    função recursiva conta até 10, utilizando a variável
    estática <var class="varname">$count</var> para saber quando parar:
   </p>
   <p class="para">
    <div class="example" id="example-8">
     <p><strong>Exemplo #8 Variáveis estáticas em funções recursivas</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">Teste</span><span style="color: #007700">()<br />{<br />    static </span><span style="color: #0000BB">$count </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">$count</span><span style="color: #007700">++;<br />    echo </span><span style="color: #0000BB">$count</span><span style="color: #007700">;<br />    if (</span><span style="color: #0000BB">$count </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">10</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">Teste</span><span style="color: #007700">();<br />    }<br />    </span><span style="color: #0000BB">$count</span><span style="color: #007700">--;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="para">
    Antes do PHP 8.3.0, variáveis estáticas somente poderiam ser inicializadas usando
    uma expressão constante. A partir do PHP 8.3.0, expressões dinâmicas
    (por exemplos, chamadas de funções) também são permitidas:
   </p>
   <p class="para">
    <div class="example" id="example-9">
     <p><strong>Exemplo #9 Declarando variáveis estáticas</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(){<br />    static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;          </span><span style="color: #FF8000">// correto<br />    </span><span style="color: #007700">static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">+</span><span style="color: #0000BB">2</span><span style="color: #007700">;        </span><span style="color: #FF8000">// correto<br />    </span><span style="color: #007700">static </span><span style="color: #0000BB">$int </span><span style="color: #007700">= </span><span style="color: #0000BB">sqrt</span><span style="color: #007700">(</span><span style="color: #0000BB">121</span><span style="color: #007700">);  </span><span style="color: #FF8000">// correto a partir do PHP 8.3<br /><br />    </span><span style="color: #0000BB">$int</span><span style="color: #007700">++;<br />    echo </span><span style="color: #0000BB">$int</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>

   <p class="simpara">
    Variáveis ​​estáticas dentro de funções anônimas persistem apenas dentro daquela
    instância de função específica. Se a função anônima for recriada em cada
    chamada, a variável estática será reinicializada.
   </p>
   <div class="example" id="example-10">
    <p><strong>Exemplo #10 Variáveis ​​estáticas em funções anônimas</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">funcaoExemplo</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$result </span><span style="color: #007700">= (static function () use (</span><span style="color: #0000BB">$input</span><span style="color: #007700">) {<br />        static </span><span style="color: #0000BB">$counter </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$counter</span><span style="color: #007700">++;<br />        return </span><span style="color: #DD0000">"Entrada: </span><span style="color: #0000BB">$input</span><span style="color: #DD0000">, Contador: </span><span style="color: #0000BB">$counter</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    });<br /><br />    return </span><span style="color: #0000BB">$result</span><span style="color: #007700">();<br />}<br /><br /></span><span style="color: #FF8000">// Chamadas a funcaoExemplo irão recriar a função anônima, de forma<br />// que a variável estática não reterá seu valor.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">funcaoExemplo</span><span style="color: #007700">(</span><span style="color: #DD0000">'A'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Exibe: Entrada: A, Contador: 1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">funcaoExemplo</span><span style="color: #007700">(</span><span style="color: #DD0000">'B'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Exibe: Entrada: B, Contador: 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    A partir do PHP 8.1.0, quando um método com variáveis estáticas é herdado (mas não sobrescrito),
    o método herdado não compartilhará as variáveis estáticas do método acima.
    Isso significa que variáveis estáticas nos métodos agora se comportam da mesma forma que propriedades estáticas.
   </p>

   <p class="simpara">
    A partir do PHP 8.3.0, variáveis estáticas podem ser inicializadas com expressões arbitrárias.
    Isto significa que chamadas de métodos, por exemplo, podem ser usadas para iniciá-las.
   </p>

   <div class="example" id="example-11">
    <p><strong>Exemplo #11 Uso de variáveis estáticas em métodos herdados</strong></p>
    <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 </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br />    public static function </span><span style="color: #0000BB">counter</span><span style="color: #007700">() {<br />        static </span><span style="color: #0000BB">$counter </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$counter</span><span style="color: #007700">++;<br />        return </span><span style="color: #0000BB">$counter</span><span style="color: #007700">;<br />    }<br />}<br />class </span><span style="color: #0000BB">Bar </span><span style="color: #007700">extends </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(1)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(2)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Bar</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(3), e antes do PHP 8.1.0 int(1)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">Bar</span><span style="color: #007700">::</span><span style="color: #0000BB">counter</span><span style="color: #007700">()); </span><span style="color: #FF8000">// int(4), e antes do PHP 8.1.0 int(2)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </div>

  <div class="sect2" id="language.variables.scope.references">
   <h3 class="title">Referências em variáveis <code class="literal">global</code> e <code class="literal">static</code></h3>
   <p class="simpara">
    O PHP implementa os modificadores
    <a href="language.variables.scope.php#language.variables.scope.static" class="link">static</a> e
    <a href="language.variables.scope.php#language.variables.scope.global" class="link">global</a>
    para variáveis, em termo de <a href="language.references.php" class="link">
    referências</a>. Por exemplo, uma variável global verdadeira,
    importada dentro do escopo de uma função com a instrução <code class="literal">global</code>,
    na verdade, cria uma referência para a variável global. Isto pode levar a
    comportamentos imprevisíveis nos seguintes casos:
   </p>

   <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">function </span><span style="color: #0000BB">test_global_ref</span><span style="color: #007700">() {<br />    global </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />}<br /><br />function </span><span style="color: #0000BB">test_global_noref</span><span style="color: #007700">() {<br />    global </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">test_global_ref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">test_global_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">O exemplo acima produzirá:</p>

   <div class="example-contents screen">
<div class="cdata"><pre>
NULL
object(stdClass)#1 (0) {
}
</pre></div>
   </div>

   <p class="simpara">
    Um comportamento similar se aplica à declaração <code class="literal">static</code>.
    Referências não são armazenadas estaticamente:
   </p>

   <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">function &amp;</span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">() {<br />    static </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /><br />    echo </span><span style="color: #DD0000">'Objeto estático: '</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />        </span><span style="color: #FF8000">// Atribui uma referência à variável estática<br />        </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= &amp;</span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">++;<br />    }<br />    return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />}<br /><br />function &amp;</span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">() {<br />    static </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /><br />    echo </span><span style="color: #DD0000">"Objeto estático: "</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">);<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$new </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br />        </span><span style="color: #FF8000">// Atribui o objeto à variável estática<br />        </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= </span><span style="color: #0000BB">$new</span><span style="color: #007700">;<br />    }<br />    if (!isset(</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">property</span><span style="color: #007700">++;<br />    }<br />    return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$obj1 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$still_obj1 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_ref</span><span style="color: #007700">();<br />echo </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj2 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$still_obj2 </span><span style="color: #007700">= </span><span style="color: #0000BB">get_instance_noref</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <p class="para">O exemplo acima produzirá:</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
Objeto estático: NULL
Objeto estático: NULL

Objeto estático: NULL
Objeto estático: object(stdClass)#3 (1) {
  [&quot;property&quot;]=&gt;
  int(1)
}
</pre></div>
   </div>

   <p class="simpara">
    Este exemplo demonstra que ao atribuir uma referência a uma variável
    estática, ela não será <em>lembrada</em> quando a função
    <code class="literal">&amp;get_instance_ref()</code> for chamada uma segunda vez.
   </p>
   </div>
  </div><?php manual_footer($setup); ?>