<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.namespaces.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.rules.php',
    1 => 'Reglas de resoluci&oacute;n de nombres',
    2 => 'Reglas de resoluci&oacute;n de nombres',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Los espacios de nombres',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.fallback.php',
    1 => 'Retorno al espacio global',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.faq.php',
    1 => 'Preguntas frecuentes',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/namespaces.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.namespaces.rules" class="sect1">
  <h2 class="title">Reglas de resolución de nombres</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   En el contexto de las reglas de resolución, hay varias definiciones importantes:
   <dl>
    <strong class="title">Definiciones para espacios de nombres</strong>
    
     <dt>nombre no calificado</dt>
     <dd>
      <p class="para">
       Esto es un identificador que no contiene un separador de espacio de nombres.
       Por ejemplo: <code class="literal">Foo</code>
      </p>
     </dd>
    
    
     <dt>nombre calificado</dt>
     <dd>
      <p class="para">
       Esto es un identificador que contiene un separador de espacio de nombres.
       Por ejemplo: <code class="literal">Foo\Bar</code>
      </p>
     </dd>
    
    
     <dt>Nombre absoluto</dt>
     <dd>
      <p class="para">
       Esto es un identificador que comienza con un separador de espacio de nombres.
       Por ejemplo: <code class="literal">\Foo\Bar</code>. El espacio de nombres <code class="literal">Foo</code>
       también es un nombre absoluto.
      </p>
     </dd>
    
    
     <dt>Nombre Relativo</dt>
     <dd>
      <p class="para">
       Es un identificador que comienza con <code class="literal">namespace</code>, como
       <code class="literal">namespace\Foo\Bar</code>.
      </p>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Los nombres se resuelven siguiendo las siguientes reglas:
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Los nombres absolutos siempre se traducen a nombres sin el separador de namespace.
      Por ejemplo, <code class="literal">\A\B</code> se traduce a <code class="literal">A\B</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Todos los nombres que no son absolutos se traducen con
      <code class="literal">namespace</code> reemplazado por el namespace actual.
      Si el nombre aparece en el namespace global, el prefijo
      <code class="literal">namespace\</code> se elimina. Por ejemplo <code class="literal">namespace\A</code>
      en el namespace <code class="literal">X\Y</code> se traduce a <code class="literal">X\Y\A</code>.
      El mismo nombre en el namespace global se traduce a <code class="literal">A</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Para los nombres absolutos, el primer segmento se traduce
      de acuerdo con la clase/namespace de la tabla de importación.
      Por ejemplo, si el namespace <code class="literal">A\B\C</code> se importa como <code class="literal">C</code>, el nombre <code class="literal">C\D\E</code> se traduce a <code class="literal">A\B\C\D\E</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Para los nombres absolutos, si ninguna regla de importación
      se aplica, el namespace actual se prefiere al nombre.
      Por ejemplo, el nombre <code class="literal">C\D\E</code> en el namespace <code class="literal">A\B</code>,
      se traduce a <code class="literal">A\B\C\D\E</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Para los nombres absolutos, el nombre se traduce en relación con la tabla actual de importación para el tipo de símbolo respectivo.
      Esto significa que un nombre que se asemeja a una clase se traduce de acuerdo con la tabla de importación de
      class/namespace, los nombres de funciones utilizando la
      tabla de importación de funciones, y las constantes utilizando la tabla de importación de constantes.
      Por ejemplo, después
      <code class="literal">use A\B\C;</code> un uso como <code class="literal">new C()</code> corresponde al nombre
      <code class="literal">A\B\C()</code>. De manera similar, después de <code class="literal">use function A\B\foo;</code> un uso
      como <code class="literal">foo()</code> corresponde al nombre <code class="literal">A\B\foo</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Para los nombres relativos, si ninguna regla se aplica, y el nombre
      hace referencia a una clase, el namespace actual sirve como prefijo.
      Por ejemplo <code class="literal">new C()</code> en el namespace
      <code class="literal">A\B</code> corresponde al nombre <code class="literal">A\B\C</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Para los nombres relativos, si ninguna regla se aplica, y el nombre
      hace referencia a una función o constante, y el código está
      fuera del namespace global, el nombre se resuelve durante la ejecución.
      Supongamos que el código está en el namespace
      <code class="literal">A\B</code>, aquí es cómo se resuelve una llamada a la función <code class="literal">foo()</code>:
     </span>

     <ol type="1">
      <li class="listitem">
       <span class="simpara">
        Busca una función en el espacio de nombres actual:
        <code class="literal">A\B\foo()</code>.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Intenta encontrar y llamar a la función <em>global</em>
        <code class="literal">foo()</code>.
       </span>
      </li>
     </ol>
    </li>
   </ol>
  </p>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplos de resolución de espacios de nombres</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">namespace </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">B\D</span><span style="color: #007700">, </span><span style="color: #0000BB">C\E </span><span style="color: #007700">as </span><span style="color: #0000BB">F</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// llamadas de funciones<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();      </span><span style="color: #FF8000">// intenta llamar a la función "foo" en el espacio de nombres "A"<br />            // luego llama a la función global "foo"<br /><br /></span><span style="color: #0000BB">\foo</span><span style="color: #007700">();     </span><span style="color: #FF8000">// llama a la función "foo" definida en el espacio de nombres global<br /><br /></span><span style="color: #0000BB">my\foo</span><span style="color: #007700">();   </span><span style="color: #FF8000">// llama a la función "foo" definida en el espacio de nombres "A\my"<br /><br /></span><span style="color: #0000BB">F</span><span style="color: #007700">();        </span><span style="color: #FF8000">// intenta llamar a la función "F" definida en el espacio "A"<br />            // luego intenta llamar a la función global "F"<br /><br />// referencias de clases<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">B</span><span style="color: #007700">();    </span><span style="color: #FF8000">// crea un objeto de la clase "B" definida en el espacio de nombres  "A"<br />            // si no se encuentra, intenta el autocargado en la clase "A\B"<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">D</span><span style="color: #007700">();    </span><span style="color: #FF8000">// crea un objeto de la clase "D" definida en el espacio de nombres  "B"<br />            // si no se encuentra, intenta el autocargado en la clase "B\D"<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">F</span><span style="color: #007700">();    </span><span style="color: #FF8000">// crea un objeto de la clase "E" definida en el espacio de nombres  "C"<br />            // si no se encuentra, intenta el autocargado en la clase "C\E"<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">\B</span><span style="color: #007700">();   </span><span style="color: #FF8000">// crea un objeto de la clase "B" definida en el espacio de nombres global<br />            // si no se encuentra, intenta el autocargado en la clase "B"<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">\D</span><span style="color: #007700">();   </span><span style="color: #FF8000">// crea un objeto de la clase "D" definida en el espacio de nombres global<br />            // si no se encuentra, intenta el autocargado en la clase "D"<br /><br /></span><span style="color: #007700">new </span><span style="color: #0000BB">\F</span><span style="color: #007700">();   </span><span style="color: #FF8000">// crea un objeto de la clase "F" definida en el espacio de nombres global<br />            // si no se encuentra, intenta el autocargado en la clase "F"<br /><br />// métodos estáticos y funciones de espacio de nombres de otro espacio<br /><br /></span><span style="color: #0000BB">B\foo</span><span style="color: #007700">();    </span><span style="color: #FF8000">// llama a la función "foo" del espacio de nombres "A\B"<br /><br /></span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();   </span><span style="color: #FF8000">// llama al método "foo" de la clase "B" definida en el espacio de nombres  "A"<br />            // si la clase "A\B" no se encuentra, intenta el autocargado en la clase "A\B"<br /><br /></span><span style="color: #0000BB">D</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();   </span><span style="color: #FF8000">// llama al método "foo" de la clase "D" definida en el espacio de nombres  "B"<br />            // si la clase "B\D" no se encuentra, intenta el autocargado en la clase "B\D"<br /><br /></span><span style="color: #0000BB">\B\foo</span><span style="color: #007700">();   </span><span style="color: #FF8000">// llama a la función "foo" del espacio de nombres "B"<br /><br /></span><span style="color: #0000BB">\B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();  </span><span style="color: #FF8000">// llama al método "foo" de la clase "B" ubicada en el espacio de nombres global<br />            // si la clase "B" no se encuentra, intenta el autocargado en la clase "B"<br /><br />// métodos estáticos y funciones de espacio de nombres del espacio actual<br /><br /></span><span style="color: #0000BB">A\B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();   </span><span style="color: #FF8000">// llama al método "foo" de la clase "B" del espacio de nombres "A\A"<br />              // si la clase "A\A\B" no se encuentra, intenta el autocargado en la clase "A\A\B"<br /><br /></span><span style="color: #0000BB">\A\B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();  </span><span style="color: #FF8000">// llama al método "foo" de la clase "B" del espacio de nombres "A"<br />              // si la clase "A\B" no se encuentra, intenta el autocargado en la clase "A\B"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div><?php manual_footer($setup); ?>