【php100 Selected Translation】Namespace is the most important change in PHP 5.3. C# and Java developers are very familiar with this term, and they can finally better change the structure of PHP applications.
Why do we need namespaces?
As your PHP code base grows, the risk of modifying previously defined function and class names becomes higher. The problem is even more serious when you try to add third-party components or plug-ins. What if there are two or more code sets that implement a "Database" and "User" class?
Until now, the only solution has been to use long class/function names. For example, WordPress uses the prefix "WP_" before each class and function name, and Zend Framework uses a very descriptive naming convention. , resulting in very verbose class names, such as:
Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive
Name conflict problems can be solved using namespaces. PHP constants, classes and functions can be combined into namespace libraries.
How to define a namespace?
By default, all constant, class and function names are placed in the global space, just like before PHP supported namespaces.
You can define a namespace by using the keyword namespace at the top of the PHP file. It must be the first command (except declare), and no non-PHP code, HTML, or spaces can appear in front of it. For example:
<ol class="dp-c"><li class="alt"><span><span>< ?php </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// define this code in the 'MyProject' namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>namespace MyProject; </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// ... code ... </FONT></SPAN><SPAN> </SPAN></SPAN></LI></OL>
The code below this line is assigned to the MyProject namespace. It is impossible to nest namespaces or define multiple namespaces for the same code block. If you really do this, Only the last namespace is recognized, but you can define different namespace codes in the same file, such as:
<OL class=dp-c><LI class=alt><SPAN><SPAN>< ?php </SPAN></SPAN><LI class=""><SPAN>namespace MyProject1; </SPAN><LI class=alt><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject1 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>namespace MyProject2; </SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject2 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN></SPAN><SPAN class=comment><FONT color=#008200>// Alternative syntax </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>namespace MyProject3 { </SPAN><LI class=""><SPAN> </SPAN><SPAN class=comment><FONT color=#008200>// PHP code for the MyProject3 namespace </FONT></SPAN><SPAN> </SPAN></SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN>?> </span></span></li></ol>
Although it is possible to do this, I recommend you not to do it. It is better to define only one namespace in each file so as not to confuse you.
Subnamespaces
PHP allows you to define hierarchical namespaces so that libraries can be subdivided. Subnamespaces are separated by a backslash character (), such as: ◆ In the file, we use the AppLib1 namespace to define a constant, a function and a class, such as:
lib1.php
Now we can include this section in another PHP file Code, such as: myapp.phpdoes not define a namespace in myapp.php, so this code exists in the global space, and any reference to MYCONST, MyFunction and MyClass Direct references will fail because they exist in the AppLib1 namespace. In order to call the code in lib1.php, we can add a prefix before the AppLib1 namespace to define a fully qualified name. The following is the output when I load myapp.php Result:
Fully qualified names can get very long, and there are some obvious benefits to defining long names, like App-Lib1-MyClass. Original text:<ol class="dp-xml"><li class="alt"><span><span class="tag"><strong><font color="#006699"><</FONT></STRONG></SPAN><SPAN> ?php </SPAN></SPAN><LI class=""><SPAN>// application library 1 </SPAN><LI class=alt><SPAN>namespace AppLib1; </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>const </SPAN><SPAN class=attribute><FONT color=#ff0000>MYCONST</FONT></SPAN><SPAN> = </SPAN><SPAN class=attribute-value><FONT color=#0000ff>'AppLib1MYCONST'</FONT></SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>function MyFunction() { </SPAN><LI class=""><SPAN> return __FUNCTION__; </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>class MyClass { </SPAN><LI class=""><SPAN> static function WhoAmI() { </SPAN><LI class=alt><SPAN> return __METHOD__; </SPAN><LI class=""><SPAN> } </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></font></strong></span><span> </span></span></li></ol>
Author:
Craig Buckler<ol class="dp-xml"><li class="alt"><span><span class="tag"><strong><font color="#006699"><</FONT></STRONG></SPAN><SPAN> ?php </SPAN></SPAN><LI class=""><SPAN>header('Content-type: text/plain'); </SPAN><LI class=alt><SPAN>require_once('lib1.php'); </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>echo AppLib1MYCONST . "n"; </SPAN><LI class=""><SPAN>echo AppLib1MyFunction() . "n"; </SPAN><LI class=alt><SPAN>echo AppLib1MyClass::WhoAmI() . "n"; </SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></font></strong></span><span> </span></span></li></ol>
<ol class="dp-xml"> <li class="alt"><span><span>AppLib1MYCONST </span></span></li> <li class=""><span>AppLib1MyFunction </span></li> <li class="alt"><span>AppLib1MyClass::WhoAmI </span></li> </ol>
http://www.bkjia.com/PHPjc/446608.html
www.bkjia.com
[php100 selected translation] Namespace is the most important change in PHP 5.3, for C# and Java developers The term is very familiar and they can finally change the structure of PHP applications for the better...