<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.importing.php',
    1 => 'Aliasing and Importing',
    2 => 'Using namespaces: Aliasing/Importing',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.nsconstants.php',
    1 => 'namespace keyword and __NAMESPACE__',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.global.php',
    1 => 'Global space',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'en',
    '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">Using namespaces: Aliasing/Importing</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   The ability to refer to an external fully qualified name with an alias, or importing,
   is an important feature of namespaces. This is similar to the
   ability of unix-based filesystems to create symbolic links to a file or to a directory.
  </p>
  <p class="para">
   PHP can alias(/import) constants, functions, classes, interfaces, traits, enums and namespaces.
  </p>
  <p class="para">
   Aliasing is accomplished with the <code class="literal">use</code> operator.
   Here is an example showing all 5 kinds of importing:
   <div class="example" id="example-1">
    <p><strong>Example #1 importing/aliasing with the use operator</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">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// this is the same as use My\Full\NSname as NSname<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// importing a global class<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">// importing a function<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">My\Full\functionName</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// aliasing a function<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">My\Full\functionName </span><span style="color: #007700">as </span><span style="color: #0000BB">func</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// importing a constant<br /></span><span style="color: #007700">use const </span><span style="color: #0000BB">My\Full\CONSTANT</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\Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class foo\Another<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class My\Full\Classname<br /></span><span style="color: #0000BB">NSname\subns\func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function My\Full\NSname\subns\func<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">// instantiates object of class ArrayObject<br />// without the "use ArrayObject" we would instantiate an object of class foo\ArrayObject<br /></span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function My\Full\functionName<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">; </span><span style="color: #FF8000">// echoes the value of My\Full\CONSTANT<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Note that for namespaced names (fully qualified namespace names containing
   namespace separator, such as <code class="literal">Foo\Bar</code> as opposed to global names that
   do not, such as <code class="literal">FooBar</code>), the leading backslash is unnecessary and not
   recommended, as import names
   must be fully qualified, and are not processed relative to the current namespace.
  </p>
  <p class="para">
   PHP additionally supports a convenience shortcut to place multiple use statements
   on the same line
   <div class="example" id="example-2">
    <p><strong>Example #2 importing/aliasing with the use operator, multiple use statements combined</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">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class My\Full\Classname<br /></span><span style="color: #0000BB">NSname\subns\func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function My\Full\NSname\subns\func<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Importing is performed at compile-time, and so does not affect dynamic class, function
   or constant names.
   <div class="example" id="example-3">
    <p><strong>Example #3 Importing and dynamic names</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">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class My\Full\Classname<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'Another'</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">// instantiates object of class Another<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   In addition, importing only affects unqualified and qualified names. Fully qualified
   names are absolute, and unaffected by imports.
   <div class="example" id="example-4">
    <p><strong>Example #4 Importing and fully qualified names</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">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class My\Full\Classname<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class Another<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another\thing</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class My\Full\Classname\thing<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Another\thing</span><span style="color: #007700">; </span><span style="color: #FF8000">// instantiates object of class Another\thing<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">Scoping rules for importing</h3>
   <p class="para">
    The <code class="literal">use</code> keyword must be declared in the
    outermost scope of a file (the global scope) or inside namespace
    declarations. This is because the importing is done at compile
    time and not runtime, so it cannot be block scoped. The following
    example will show an illegal use of the <code class="literal">use</code>
    keyword:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Example #5 Illegal importing rule</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">Languages</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">toGreenlandic</span><span style="color: #007700">()<br />{<br />    use </span><span style="color: #0000BB">Languages\Danish</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">
     Importing rules are per file basis, meaning included files will
     <em>NOT</em> inherit the parent file&#039;s importing rules.
    </p>
   </p></blockquote>
  </div>
  <div class="sect2" id="language.namespaces.importing.group">
   <h3 class="title">Group <code class="literal">use</code> declarations</h3>
   <p class="para">
    Classes, functions and constants being imported from
    the same <a href="language.namespaces.definition.php" class="link"><code class="literal">namespace</code></a> can be grouped together in a single <a href="language.namespaces.importing.php" class="link"><code class="literal">use</code></a>
    statement.
   </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">some\namespace\ClassA</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassB</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassC </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">some\namespace\fn_a</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_b</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_c</span><span style="color: #007700">;<br /><br />use const </span><span style="color: #0000BB">some\namespace\ConstA</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstB</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstC</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// is equivalent to the following groupped use declaration<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ClassA</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassB</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassC </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">some\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">some\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); ?>