<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.importing.php',
    1 => 'Apelidando e Importando',
    2 => 'Usando namespaces: Apelidando/Importando',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.nsconstants.php',
    1 => 'Palavra-chave namespace e __NAMESPACE__',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.global.php',
    1 => 'Espa&ccedil;o Global',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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.importing" class="sect1">
  <h2 class="title">Usando namespaces: Apelidando/Importando</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   A capacidade de se referir a um nome totalmente qualificado externo com um apelido, ou importação,
   é um recurso importante dos namespaces. Isso é semelhante à
   capacidade dos sistemas de arquivos baseados em Unix de criar links simbólicos para um arquivo ou diretório.
  </p>
  <p class="para">
   O PHP pode apelidar ou importar constantes, funções, classes, interfaces, traits, enums e namespaces.
  </p>
  <p class="para">
   A criação de apelidos é realizada com o operador <code class="literal">use</code>.
   Aqui está um exemplo mostrando todos os 5 tipos de importação:
   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Importando ou apelidando com o operador use</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 />use </span><span style="color: #0000BB">Caminho\Completo\Classe </span><span style="color: #007700">as </span><span style="color: #0000BB">Outra</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Isso é o mesmo que use Caminho\Completo\NomeNamespace as NomeNamespace<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">Caminho\Completo\NomeNamespace</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Importando uma classe global<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">ArrayObject</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Importando uma função<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">Caminho\Completo\nomeFuncao</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Apelidando uma função<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">Caminho\Completo\nomeFuncao </span><span style="color: #007700">as </span><span style="color: #0000BB">funcao</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Importando uma constante<br /></span><span style="color: #007700">use const </span><span style="color: #0000BB">Caminho\Completo\CONSTANTE</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">namespace\Outra</span><span style="color: #007700">; </span><span style="color: #FF8000">// Instancia um objeto da classe foo\Outra<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Outra</span><span style="color: #007700">; </span><span style="color: #FF8000">// Instancia um objeto da classe Caminho\Completo\Classe<br /></span><span style="color: #0000BB">NomeNamespace\SubNamespace\funcao</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Chama a função Caminho\Completo\NomeNamespace\SubNamespace\funcao<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">ArrayObject</span><span style="color: #007700">(array(</span><span style="color: #0000BB">1</span><span style="color: #007700">)); </span><span style="color: #FF8000">// Instancia um objeto da classe ArrayObject<br />// Sem a declaração "use ArrayObject" teria sido instanciado um objeto da classe foo\ArrayObject<br /></span><span style="color: #0000BB">funcao</span><span style="color: #007700">(); </span><span style="color: #FF8000">// chama a função Caminho\Completo\nomeFuncao<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">CONSTANTE</span><span style="color: #007700">; </span><span style="color: #FF8000">// imprime o valor de Caminho\Completo\CONSTANTE<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Note que para nomes com namespaces (nomes de namespaces totalmente qualificados contendo
   o separador de namespace, como <code class="literal">Foo\Bar</code>, em oposição a nomes globais sem
   separadores, como <code class="literal">FooBar</code>), a barra invertida inicial não é necessária e não
   é recomendada, pois nomes importados precisam
   ser totalmente qualificados e não são processados em relação ao namespace atual.
  </p>
  <p class="para">
   O PHP também suporta um atalho de conveniência para colocar várias instruções use
   na mesma linha.
   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Importando ou criando apelidos com várias declarações use combinadas</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">use </span><span style="color: #0000BB">Caminho\Completo\Classe </span><span style="color: #007700">as </span><span style="color: #0000BB">Outra</span><span style="color: #007700">, </span><span style="color: #0000BB">Caminho\Completo\NomeNamespace</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Outra</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Instancia um objeto da classe Caminho\Completo\Classe<br /></span><span style="color: #0000BB">NomeNamespace\SubNamespace\funcao</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Chama a função Caminho\Completo\NomeNamespace\SubNamespace\funcao<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   A importação é realizada em tempo de compilação e por isso, não afeta classes, funções
   ou nomes de constantes gerados dinamicamente.
   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Importação e nomes dinâmicos</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">use </span><span style="color: #0000BB">Caminho\Completo\Classe </span><span style="color: #007700">as </span><span style="color: #0000BB">Outra</span><span style="color: #007700">, </span><span style="color: #0000BB">Caminho\Completo\NomeNamespace</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Outra</span><span style="color: #007700">; </span><span style="color: #FF8000">// Instancia um objeto da classe Caminho\Completo\Classe<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'Outra'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;    </span><span style="color: #FF8000">// Instancia um objeto da classe Outra<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Além disso, a importação afeta apenas nomes não qualificados e qualificados. Nomes totalmente
   qualificados são absolutos e não são afetados pelas importações.
   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Importação e nomes completamente qualificados</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">use </span><span style="color: #0000BB">Caminho\Completo\Classe </span><span style="color: #007700">as </span><span style="color: #0000BB">Outra</span><span style="color: #007700">, </span><span style="color: #0000BB">Caminho\Completo\NomeNamespace</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Outra</span><span style="color: #007700">;        </span><span style="color: #FF8000">// Instancia um objeto da classe Caminho\Completo\Classe<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Outra</span><span style="color: #007700">;       </span><span style="color: #FF8000">// Instancia um objeto da classe Outra<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Outra\Coisa</span><span style="color: #007700">;  </span><span style="color: #FF8000">// Instancia um objeto da classe Caminho\Completo\Classe\Coisa<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Outra\Coisa</span><span style="color: #007700">; </span><span style="color: #FF8000">// Instancia um objeto da classe Outra\Coisa<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <div class="sect2" id="language.namespaces.importing.scope">
   <h3 class="title">Regras de escopo para importação</h3>
   <p class="para">
    A palavra-chave <code class="literal">use</code> precisa ser declarada no
    escopo mais externo do arquivo (o escopo global) ou dentro de declarações
    de namespaces. Isso ocorre por a importação ser realizada em tempo de
    compilação e não em tempo de execução, portanto, não pode ter escopo de bloco. O exemplo
    a seguir mostra um uso inválido da palavra-chave
    <code class="literal">use</code>:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Exemplo #5 Regra de importação inválida</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">Linguas</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">paraGroenlandes</span><span style="color: #007700">()<br />{<br />    use </span><span style="color: #0000BB">Linguas\Dinamarques</span><span style="color: #007700">;<br /><br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     As regras de importação são por arquivo, o que significa que os arquivos incluídos
     <em>NÃO</em> herdarão as regras de importação do arquivo pai.
    </p>
   </p></blockquote>
  </div>
  <div class="sect2" id="language.namespaces.importing.group">
   <h3 class="title">Declarações <code class="literal">use</code> em grupo</h3>
   <p class="para">
    Classes, funções e constantes importadas do
    mesmo <a href="language.namespaces.definition.php" class="link"><code class="literal">namespace</code></a> podem ser agrupadas numa única declaração
    <a href="language.namespaces.importing.php" class="link"><code class="literal">use</code></a>.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">use </span><span style="color: #0000BB">algum\namespace\ClasseA</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">algum\namespace\ClasseB</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">algum\namespace\ClasseC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">;<br /><br />use function </span><span style="color: #0000BB">algum\namespace\fn_a</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">algum\namespace\fn_b</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">algum\namespace\fn_c</span><span style="color: #007700">;<br /><br />use const </span><span style="color: #0000BB">algum\namespace\ConstA</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">algum\namespace\ConstB</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">algum\namespace\ConstC</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// É equivalente à seguinte declaração use agrupada<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">algum\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ClasseA</span><span style="color: #007700">, </span><span style="color: #0000BB">ClasseB</span><span style="color: #007700">, </span><span style="color: #0000BB">ClasseC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">};<br />use function </span><span style="color: #0000BB">algum\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">fn_a</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_b</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_c</span><span style="color: #007700">};<br />use const </span><span style="color: #0000BB">algum\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ConstA</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstB</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstC</span><span style="color: #007700">};</span></span></code></div>
    </div>

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