<!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>namespace keyword and __NAMESPACE__ constant</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.namespaces.dynamic.html">Namespaces and dynamic language features</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.importing.html">Using namespaces: Aliasing/Importing</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.nsconstants" class="sect1"> <h2 class="title">namespace keyword and __NAMESPACE__ constant</h2> <p class="verinfo">(PHP 5 >= 5.3.0, PHP 7)</p> <p class="para"> PHP supports two ways of abstractly accessing elements within the current namespace, the <strong><code>__NAMESPACE__</code></strong> magic constant, and the <em>namespace</em> keyword. </p> <p class="para"> The value of <strong><code>__NAMESPACE__</code></strong> is a string that contains the current namespace name. In global, un-namespaced code, it contains an empty string. <div class="example" id="example-253"> <p><strong>Example #1 __NAMESPACE__ example, namespaced code</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">MyProject</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">'"'</span><span style="color: #007700">, </span><span style="color: #0000BB">__NAMESPACE__</span><span style="color: #007700">, </span><span style="color: #DD0000">'"'</span><span style="color: #007700">; </span><span style="color: #FF8000">// outputs "MyProject"<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="example-254"> <p><strong>Example #2 __NAMESPACE__ example, global code</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'"'</span><span style="color: #007700">, </span><span style="color: #0000BB">__NAMESPACE__</span><span style="color: #007700">, </span><span style="color: #DD0000">'"'</span><span style="color: #007700">; </span><span style="color: #FF8000">// outputs ""<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> The <strong><code>__NAMESPACE__</code></strong> constant is useful for dynamically constructing names, for instance: <div class="example" id="example-255"> <p><strong>Example #3 using __NAMESPACE__ for dynamic name construction</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">MyProject</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #0000BB">$classname</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">__NAMESPACE__ </span><span style="color: #007700">. </span><span style="color: #DD0000">'\\' </span><span style="color: #007700">. </span><span style="color: #0000BB">$classname</span><span style="color: #007700">;<br /> return new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> <p class="para"> The <em>namespace</em> keyword can be used to explicitly request an element from the current namespace or a sub-namespace. It is the namespace equivalent of the <em>self</em> operator for classes. <div class="example" id="example-256"> <p><strong>Example #4 the namespace operator, inside a namespace</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">MyProject</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">blah</span><span style="color: #007700">\</span><span style="color: #0000BB">blah </span><span style="color: #007700">as </span><span style="color: #0000BB">mine</span><span style="color: #007700">; </span><span style="color: #FF8000">// see "Using namespaces: Aliasing/Importing"<br /><br /></span><span style="color: #0000BB">blah</span><span style="color: #007700">\</span><span style="color: #0000BB">mine</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function MyProject\blah\mine()<br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">blah</span><span style="color: #007700">\</span><span style="color: #0000BB">mine</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function MyProject\blah\mine()<br /><br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function MyProject\func()<br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">sub</span><span style="color: #007700">\</span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function MyProject\sub\func()<br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">cname</span><span style="color: #007700">::</span><span style="color: #0000BB">method</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls static method "method" of class MyProject\cname<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new namespace\</span><span style="color: #0000BB">sub</span><span style="color: #007700">\</span><span style="color: #0000BB">cname</span><span style="color: #007700">(); </span><span style="color: #FF8000">// instantiates object of class MyProject\sub\cname<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= namespace\</span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">; </span><span style="color: #FF8000">// assigns value of constant MyProject\CONSTANT to $b<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="example-257"> <p><strong>Example #5 the namespace operator, in global code</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function func()<br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">sub</span><span style="color: #007700">\</span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls function sub\func()<br /></span><span style="color: #007700">namespace\</span><span style="color: #0000BB">cname</span><span style="color: #007700">::</span><span style="color: #0000BB">method</span><span style="color: #007700">(); </span><span style="color: #FF8000">// calls static method "method" of class cname<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new namespace\</span><span style="color: #0000BB">sub</span><span style="color: #007700">\</span><span style="color: #0000BB">cname</span><span style="color: #007700">(); </span><span style="color: #FF8000">// instantiates object of class sub\cname<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= namespace\</span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">; </span><span style="color: #FF8000">// assigns value of constant CONSTANT to $b<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </p> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.namespaces.dynamic.html">Namespaces and dynamic language features</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.importing.html">Using namespaces: Aliasing/Importing</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>