<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.variables.scope.php',
    1 => '&Aacute;mbito de las variables',
    2 => '&Aacute;mbito de las variables',
  ),
  'up' => 
  array (
    0 => 'language.variables.php',
    1 => 'Variables',
  ),
  'prev' => 
  array (
    0 => 'language.variables.predefined.php',
    1 => 'Variables Predefinidas',
  ),
  'next' => 
  array (
    0 => 'language.variables.variable.php',
    1 => 'Variables variables',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Ámbito de las variables</h2>

   <p class="simpara">
    El ámbito de una variable es el contexto en el cual la variable está
    definida.
    PHP tiene un ámbito de función y un ámbito global.
    Cualquier variable difinida fuera de una función está limitada al ámbito global.
    Cuando se incluye un archivo, el código contenido hereda el ámbito de la
    variable de la línea en la cual se incluye el archivo.
   </p>
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo de una variable de ámbito 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 />include </span><span style="color: #DD0000">'b.inc'</span><span style="color: #007700">; </span><span style="color: #FF8000">// La variable $a estará disponible en el interior de b.inc<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="simpara">
    Cualquier variable declarada dentro de una función o una
    <a href="functions.anonymous.php" class="link">funcíón anónima</a>
    está limitada al ámbito del cuerpo de dicha función.
    Sin embargo, las <a href="functions.arrow.php" class="link">funciones de flecha</a>
    vinculan las variables desde el ámbito padre haciendo que
    estén disponibles dentro de la función.
    Si se incluye un archivo dentro de una función, las variables
    contenidas en el archivo llamado estarán disponibles como si
    se hubieran definido dentro de la función que realiza la llamada.
   </p>

   <div class="example" id="example-2">
    <p><strong>Ejemplo #2 Ejemplo de una variable de ámbito local</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">// ámbito 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">// La variable $a no está definida ya que se refiere a una versión 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">
   El ejemplo anterior producirá un <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> por una
   variable no definida (o un <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> antes de PHP 8.0.0).
   Esto se debe a la expresión echo hace referencia a una versión local de
   la variable <var class="varname">$a</var>, a la cual no se le ha asignado un valor
   dentro de su ámbito.
   Puede que usted note que hay una pequeña diferencia con el lenguaje C,
   en el que las variables globales están disponibles automáticamente dentro
   de la función a menos que sean expresamente sobreescritas por una
   definición local. Esto puede causar algunos problemas, ya que la gente
   podría cambiar variables globales sin darse cuenta.
   En PHP, las variables globales deben ser declaradas globales dentro de la
   función si van a ser utilizadas dentro de dicha función.
  </p>

  <div class="sect2" id="language.variables.scope.global">
   <h3 class="title">La palabra clave <code class="literal">global</code></h3>
   <p class="simpara">
    La palabra clave <code class="literal">global</code> se usa para vincular una
    variable desde el ámbito global a un ámbito local. La palabra clave
    puede ser usada con una lista de variables o con una sola variable.
    Una variable local será creada haciendo referendia a una variable global
    con el mismo nombre. Si no existe la variable global, la variable será
    creada en el ámbito global y asignado el 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>Ejemplo #3 Uso de <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">Suma</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">Suma</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>El ejemplo anterior mostrará:</p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
3
</pre></div>
      </div>
    </div>
   </p>

   <p class="simpara">
    Al declarar las variables
    <var class="varname">$a</var> y <var class="varname">$b</var> globales dentro de la
    función, todas las referencias a tales variables se referirán a la
    versión global. No hay límite al número de variables globales que se
    pueden manipular dentro de una función.
   </p>

   <p class="simpara">
    Un segundo método para acceder a las variables desde un ámbito global es
    usando el array especial definido por PHP <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var>.
    El ejemplo anterior se puede reescribir así:
   </p>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Ejemplo #4 Uso de <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> en 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">Suma</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">Suma</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">
    El array <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> es un array asociativo con el
    nombre de la variable global como clave y los contenidos de dicha
    variable como el valor del elemento del array.
    <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> existe en cualquier ámbito, esto ocurre ya
    que <var class="varname"><a href="reserved.variables.globals.php" class="classname">$GLOBALS</a></var> es una <a href="language.variables.superglobals.php" class="link">superglobal</a>. Aquí hay un
    ejemplo que demuestra el poder de las superglobales:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Ejemplo #5 Ejemplo que demuestra las superglobales y el ámbito</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 una clave <code class="literal">global</code> fuera de una función no es un
     error. Esta puede ser utilizada aún si el fichero está incluido desde el interior de una función.
    </span>
   </p></blockquote>
  </div>

  <div class="sect2" id="language.variables.scope.static">
   <h3 class="title">Uso de variables <code class="literal">static</code></h3>

   <p class="simpara">
    Otra característica importante del ámbito de las variables es la variable
    <em>estática</em>. Una variable estática existe sólo en el
    ámbito local de la función, pero no pierde su valor cuando la ejecución
    del programa abandona este ámbito. Consideremos el siguiente ejemplo:
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Ejemplo #6 Ejemplo que demuestra la necesidad de variables
      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">test</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">
    Esta función tiene poca utilidad ya que cada vez que es llamada asigna a
    <var class="varname">$a</var> el valor <code class="literal">0</code> e imprime un
    <code class="literal">0</code>.  La sentencia <var class="varname">$a</var>++, que incrementa la
    variable, no sirve para nada, ya que en cuanto la función finaliza, la
    variable <var class="varname">$a</var> desaparece.  Para hacer una función útil
    para contar, que no pierda la pista del valor actual del conteo, la
    variable <var class="varname">$a</var> debe declararse como estática:
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Ejemplo #7 Ejemplo del uso de variables 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">test</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">
    Ahora, <var class="varname">$a</var> se inicializa únicamente en la primera
    llamada a la función, y cada vez que la función <code class="literal">test()</code> es llamada,
    imprimirá el valor de <var class="varname">$a</var> y lo incrementa.
   </p>

   <p class="simpara">
    Las variables estáticas también proporcionan una forma de manejar
    funciones recursivas. La siguiente función cuenta recursivamente
    hasta 10, usando la variable estática <var class="varname">$count</var>
    para saber cuándo parar:
   </p>
   <p class="para">
    <div class="example" id="example-8">
     <p><strong>Ejemplo #8 Variables estáticas con funciones 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">test</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">test</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 de PHP 8.3.0, las variables estáticas solo podían ser inicializadas
    usando expresiones constantes. A partir de PHP 8.3.0, expresiones dinámicas
    (por ejemplo, llamadas a funciones) también están permitidas:
   </p>
   <p class="para">
    <div class="example" id="example-9">
     <p><strong>Ejemplo #9 Declarando variables 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">// correcto<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">// correcto<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">// correcto a partir de PHP 8.3.0<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">
    Las variables estáticas dentro de funiones anónimas también persisten
    solo dentro de esa instancia específica de la función. Si la función
    anónima es recreada en cada llamada, la variable estática será
    reinicializada.
   </p>
   <div class="example" id="example-10">
    <p><strong>Ejemplo #10 Variables estáticas en funciones 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">exampleFunction</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">// Las llamadas a exampleFunction recrearán la función anónima, por tanto<br />// la variable estática no retendrá su valor.<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">exampleFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'A'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Devolverá: Entrada: A, Contador: 1<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">exampleFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'B'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Devolverá: Entrada: B, Contador: 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    A partir de PHP 8.1.0, cuando un método que usa variables estáticas es
    heredado (pero no sobrescrito), el método heredado compartirá ahora las
    variables estáticas con el método padre. Esto significa que las variables
    estáticas en los métodos ahora se comportan de la misma manera que las
    propiedades estáticas.
   </p>

   <p class="simpara">
    A partir de PHP 8.3.0, las variables estáticas pueden ser inicializadas con
    expresiones arbitrarias. Esto significa que las llamadas a métodos, por
    ejemplo, pueden ser usadas para inicializar variables estáticas.
   </p>

   <div class="example" id="example-11">
    <p><strong>Ejemplo #11 Uso de variables estáticas en métodos heredados</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), antes de 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), antes de 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">Referencias con variables <code class="literal">global</code> y <code class="literal">static</code></h3>
   <p class="simpara">
    PHP implementa los modificadores
    <a href="language.variables.scope.php#language.variables.scope.static" class="link">static</a> y <a href="language.variables.scope.php#language.variables.scope.global" class="link">global</a> para variables
    en términos de <a href="language.references.php" class="link">referencias</a>.
    Por ejemplo, una variable global verdadera importada dentro del ámbito
    de una función con <code class="literal">global</code> crea una referencia a la
    variable global. Esto puede ser causa de un comportamiento inesperado,
    tal y como podemos comprobar en el siguiente ejemplo:
   </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">El ejemplo anterior mostrará:</p>

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

   <p class="simpara">
    Un comportamiento similar se aplica a <code class="literal">static</code>. Las
    referencias no son almacenadas estáticamente.
   </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">// Asignar una referencia a la variable 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">// Asignar el objeto a la variable 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">$aun_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">$aun_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">El ejemplo anterior mostrará:</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 ejemplo demuestra que al asignar una referencia a una variable
    estática, esta no es <em>recordada</em> cuando se invoca la
    funcion <code class="literal">&amp;obtener_instancia_ref()</code> por segunda vez.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>