Sophie

Sophie

distrib > Mageia > 4 > i586 > by-pkgid > f800694edefe91adea2624f711a41a2d > files > 8911

php-manual-en-5.5.7-1.mga4.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Name resolution rules</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.namespaces.fallback.html">Using namespaces: fallback to global function/constant</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.faq.html">FAQ: things you need to know about namespaces</a></div>
 <div class="up"><a href="language.namespaces.html">Namespaces</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="language.namespaces.rules" class="sect1">
  <h2 class="title">Name resolution rules</h2>
  <p class="verinfo">(PHP 5 &gt;= 5.3.0)</p>
  <p class="para">
   For the purposes of these resolution rules, here are some important definitions:
   <dl>

    <strong class="title">Namespace name definitions</strong>
    <dt>

     <span class="term">Unqualified name</span>
     <dd>

      <p class="para">
       This is an identifier without a namespace separator, such as <em>Foo</em>
      </p>
     </dd>

    </dt>

    <dt>

     <span class="term">Qualified name</span>
     <dd>

      <p class="para">
       This is an identifier with a namespace separator, such as <em>Foo\Bar</em>
      </p>
     </dd>

    </dt>

    <dt>

     <span class="term">Fully qualified name</span>
     <dd>

      <p class="para">
       This is an identifier with a namespace separator that begins with a
       namespace separator, such as <em>\Foo\Bar</em>. The namespace
       <em>\Foo</em> is also a fully qualified name.
      </p>
     </dd>

    </dt>

   </dl>

  </p>
  <p class="para">
   Names are resolved following these resolution rules:
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Calls to fully qualified functions, classes or constants are resolved at compile-time.
      For instance <em>new \A\B</em> resolves to class <em>A\B</em>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      All unqualified and qualified names (not fully qualified names) are translated during
      compilation according to current
      import rules. For example, if the namespace <em>A\B\C</em> is imported as
      <em>C</em>, a call to 
      <em>C\D\e()</em> is translated to <em>A\B\C\D\e()</em>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Inside a namespace, all qualified names not translated according to import
      rules have the current namespace prepended.  For example, if a call
      to <em>C\D\e()</em> is performed within namespace <em>A\B</em>,
      it is translated to <em>A\B\C\D\e()</em>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Unqualified class names are translated during compilation according to current
      import rules (full name substituted for short imported name). In example, if 
      the namespace <em>A\B\C</em> is imported as C, <em>new C()</em> is 
      translated to <em>new A\B\C()</em>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Inside namespace (say A\B), calls to unqualified functions are resolved at run-time.
      Here is how a 
      call to function <em>foo()</em> is resolved:
     </span>
      <ol type="1">
       <li class="listitem">
        <span class="simpara">
         It looks for a function from the current namespace:
         <em>A\B\foo()</em>.
        </span>
       </li>
       <li class="listitem">
        <span class="simpara">
         It tries to find and call the <em class="emphasis">global</em> function
         <em>foo()</em>.
        </span>
       </li>
      </ol>
    </li>
    <li class="listitem">
     <span class="simpara">
      Inside namespace (say <em>A\B</em>), calls to unqualified or qualified
      class names (not fully qualified class names)
      are resolved at run-time. Here is how a call to 
      <em>new C()</em> or <em>new D\E()</em> is resolved.
      For <em> new C()</em>:
     </span>
     <ol type="1">
      <li class="listitem">
       <span class="simpara">
        It looks for a class from the current namespace:
        <em>A\B\C</em>.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        It attempts to autoload <em>A\B\C</em>.
       </span>
      </li>
     </ol>
     <span class="simpara">
      For <em> new D\E()</em>:
     </span>
     <ol type="1">
      <li class="listitem">
       <span class="simpara">
        It looks for a class by prepending the current namespace:
        <em>A\B\D\E</em>.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        It attempts to autoload <em>A\B\D\E</em>.
       </span>
      </li>
     </ol>
     <span class="simpara">
      To reference any global class in the global namespace, 
      its fully qualified name <em>new \C()</em> must be used.
     </span>
    </li>
   </ol>
  </p>
  <div class="example" id="example-257">
   <p><strong>Example #1 Name resolutions illustrated</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&nbsp;</span><span style="color: #0000BB">A</span><span style="color: #007700">;<br />use&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">\</span><span style="color: #0000BB">D</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">C</span><span style="color: #007700">\</span><span style="color: #0000BB">E&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">F</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;function&nbsp;calls<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;first&nbsp;tries&nbsp;to&nbsp;call&nbsp;"foo"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;then&nbsp;calls&nbsp;global&nbsp;function&nbsp;"foo"<br /><br /></span><span style="color: #007700">\</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;function&nbsp;"foo"&nbsp;defined&nbsp;in&nbsp;global&nbsp;scope<br /><br /></span><span style="color: #0000BB">my</span><span style="color: #007700">\</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;function&nbsp;"foo"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"A\my"<br /><br /></span><span style="color: #0000BB">F</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;first&nbsp;tries&nbsp;to&nbsp;call&nbsp;"F"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;then&nbsp;calls&nbsp;global&nbsp;function&nbsp;"F"<br /><br />//&nbsp;class&nbsp;references<br /><br /></span><span style="color: #007700">new&nbsp;</span><span style="color: #0000BB">B</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"B"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"A\B"<br /><br /></span><span style="color: #007700">new&nbsp;</span><span style="color: #0000BB">D</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;using&nbsp;import&nbsp;rules,&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"D"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"B"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"B\D"<br /><br /></span><span style="color: #007700">new&nbsp;</span><span style="color: #0000BB">F</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;using&nbsp;import&nbsp;rules,&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"E"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"C"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"C\E"<br /><br /></span><span style="color: #007700">new&nbsp;\</span><span style="color: #0000BB">B</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"B"&nbsp;defined&nbsp;in&nbsp;global&nbsp;scope<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"B"<br /><br /></span><span style="color: #007700">new&nbsp;\</span><span style="color: #0000BB">D</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"D"&nbsp;defined&nbsp;in&nbsp;global&nbsp;scope<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"D"<br /><br /></span><span style="color: #007700">new&nbsp;\</span><span style="color: #0000BB">F</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;creates&nbsp;object&nbsp;of&nbsp;class&nbsp;"F"&nbsp;defined&nbsp;in&nbsp;global&nbsp;scope<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"F"<br /><br />//&nbsp;static&nbsp;methods/namespace&nbsp;functions&nbsp;from&nbsp;another&nbsp;namespace<br /><br /></span><span style="color: #0000BB">B</span><span style="color: #007700">\</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;function&nbsp;"foo"&nbsp;from&nbsp;namespace&nbsp;"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">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;method&nbsp;"foo"&nbsp;of&nbsp;class&nbsp;"B"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;class&nbsp;"A\B"&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"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">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;using&nbsp;import&nbsp;rules,&nbsp;calls&nbsp;method&nbsp;"foo"&nbsp;of&nbsp;class&nbsp;"D"&nbsp;defined&nbsp;in&nbsp;namespace&nbsp;"B"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;class&nbsp;"B\D"&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"B\D"<br /><br /></span><span style="color: #007700">\</span><span style="color: #0000BB">B</span><span style="color: #007700">\</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;function&nbsp;"foo"&nbsp;from&nbsp;namespace&nbsp;"B"<br /><br /></span><span style="color: #007700">\</span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;method&nbsp;"foo"&nbsp;of&nbsp;class&nbsp;"B"&nbsp;from&nbsp;global&nbsp;scope<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;class&nbsp;"B"&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"B"<br /><br />//&nbsp;static&nbsp;methods/namespace&nbsp;functions&nbsp;of&nbsp;current&nbsp;namespace<br /><br /></span><span style="color: #0000BB">A</span><span style="color: #007700">\</span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;method&nbsp;"foo"&nbsp;of&nbsp;class&nbsp;"B"&nbsp;from&nbsp;namespace&nbsp;"A\A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;class&nbsp;"A\A\B"&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"A\A\B"<br /><br /></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">::</span><span style="color: #0000BB">foo</span><span style="color: #007700">();&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;calls&nbsp;method&nbsp;"foo"&nbsp;of&nbsp;class&nbsp;"B"&nbsp;from&nbsp;namespace&nbsp;"A"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;class&nbsp;"A\B"&nbsp;not&nbsp;found,&nbsp;it&nbsp;tries&nbsp;to&nbsp;autoload&nbsp;class&nbsp;"A\B"<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.namespaces.fallback.html">Using namespaces: fallback to global function/constant</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.faq.html">FAQ: things you need to know about namespaces</a></div>
 <div class="up"><a href="language.namespaces.html">Namespaces</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>