<?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.basics.php',
    1 => 'Introducci&oacute;n',
    2 => 'Uso de espacios de nombres: introducci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Los espacios de nombres',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.definitionmultiple.php',
    1 => 'Definici&oacute;n de varios espacios de nombres en el mismo archivo',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.dynamic.php',
    1 => 'Espacios de nombres y lenguaje din&aacute;mico',
  ),
  '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.basics" class="sect1">
  <h2 class="title">Uso de espacios de nombres: introducción</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   Antes de discutir el uso de espacios de nombres, es importante comprender
   cómo PHP deduce qué espacio de nombres está utilizando su código. Puede hacerse
   una analogía simple entre los espacios de nombres de PHP y un sistema de archivos.
   Hay tres formas de acceder a un archivo en un sistema de archivos:
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Un nombre de archivo relativo, como <code class="literal">foo.txt</code>. Esto se resuelve
      en <code class="literal">dossiercourant/foo.txt</code> donde <code class="literal">dossiercourant</code> es el
      directorio de trabajo. Si el directorio actual es <code class="literal">/home/foo</code>,
      este nombre se resuelve en <code class="literal">/home/foo/foo.txt</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Una ruta relativa, como <code class="literal">sub-dossier/foo.txt</code>. Esto se
      resuelve en <code class="literal">dossiercourant/sub-dossier/foo.txt</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Una ruta absoluta, como <code class="literal">/main/foo.txt</code>. Esto se resuelve
      en <code class="literal">/main/foo.txt</code>.
     </span>
    </li>
   </ol>
   El mismo principio puede aplicarse a los espacios de nombres de PHP.
   Por ejemplo, puede hacer referencia a una clase de tres maneras:
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Un nombre sin calificador, o una clase sin prefijo, como
      <code class="literal">$a = new foo();</code> o
      <code class="literal">foo::methodestatique();</code>. Si el espacio de nombres actual
      es <code class="literal">espacedenomscourant</code>, esto se resuelve en
      <code class="literal">espacedenomscourant\foo</code>. Si el espacio de nombres es
      global, es decir, el espacio de nombres sin nombre, esto se convierte en <code class="literal">foo</code>.
     </span>
     <span class="simpara">
      Una advertencia: los nombres sin calificador para funciones y constantes
      se tomarán del espacio de nombres global, si la función
      no está definida en el espacio de nombres actual. Ver
      <a href="language.namespaces.fallback.php" class="link">Uso de espacios de nombres:
      retorno al espacio de nombres global para funciones y constantes</a> para
      más detalles.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un nombre calificado, o una clase con prefijo como
      <code class="literal">$a = new sousespacedenoms\foo();</code> o
      <code class="literal">sousespacedenoms\foo::methodestatique();</code>. Si el espacio de nombres actual
      es <code class="literal">espacedenomscourant</code>, esto se convierte
      en <code class="literal">espacedenomscourant\sousespacedenoms\foo</code>. Si
      el código es global, es decir, el espacio de nombres sin nombre,
      esto se convierte en <code class="literal">sousespacedenoms\foo</code>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Un nombre absoluto, o un nombre con prefijo con un operador global como
      <code class="literal">$a = new \espacedenomscourant\foo();</code> o
      <code class="literal">\espacedenomscourant\foo::methodestatique();</code>. Esto siempre
      hace referencia al nombre literal especificado en el código: <code class="literal">espacedenomscourant\foo</code>.
     </span>
    </li>
   </ol>
  </p>
  <p class="para">
   Aquí hay un ejemplo de las tres sintaxis, en código real:
   <div class="informalexample">
    <p class="simpara">file1.php</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">Foo\Bar\sousespacedenoms</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    static function </span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">() {}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <p class="simpara">file2.php</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">Foo\Bar</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'file1.php'</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />class </span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />    static function </span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">() {}<br />}<br /><br /></span><span style="color: #FF8000">/* nombre no calificado */<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Se convierte en Foo\Bar\foo<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Se convierte en Foo\Bar\foo, método methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Se convierte en la constante Foo\Bar\FOO<br /><br />/* nombre calificado */<br /></span><span style="color: #0000BB">sousespacedenoms\foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Se convierte en la función Foo\Bar\sousespacedenoms\foo<br /></span><span style="color: #0000BB">sousespacedenoms\foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// se convierte en la clase Foo\Bar\sousespacedenoms\foo,<br />                                  // método methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">sousespacedenoms\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Se convierte en la constante Foo\Bar\sousespacedenoms\FOO<br /><br />/* nombre absoluto */<br /></span><span style="color: #0000BB">\Foo\Bar\foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Se convierte en la función Foo\Bar\foo<br /></span><span style="color: #0000BB">\Foo\Bar\foo</span><span style="color: #007700">::</span><span style="color: #0000BB">methodestatique</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Se convierte en la clase Foo\Bar\foo, método methodestatique<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">\Foo\Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// Se convierte en la constante Foo\Bar\FOO<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Tenga en cuenta que para acceder a cualquier clase, función o constante
   global, puede utilizarse un nombre absoluto, como
   <span class="function"><a href="function.strlen.php" class="function">\strlen()</a></span> o <span class="classname"><a href="class.exception.php" class="classname">\Exception</a></span> o
   \<strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong>.
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Acceso a clases, funciones y constantes globales desde un espacio 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">Foo</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">strlen</span><span style="color: #007700">() {}<br />const </span><span style="color: #0000BB">INI_ALL </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// llama a la función global strlen<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// acceso a una constante INI_ALL<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'error'</span><span style="color: #007700">); </span><span style="color: #FF8000">// instancia la clase global Exception<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

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