|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
php manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。
定名空间是PHP 5.3中最主要的变更,关于C#和Java开辟人员对这个词语十分熟习了,他们终究可以更好地改动PHP使用法式的布局了。
为何咱们需求定名空间?
跟着你的PHP代码库的增加,对之前界说的函数和类名停止修正时风险也更高了,当你试图增添第三方组件或插件时成绩更严重,假如存在两个或两个以上的代码集完成了一个“Database”和“User”类会怎样?
直到今朝,独一的处理举措是利用长的类/函数名,例如Wordpress在每一个类和函数名前都利用了前缀“WP_”, Zend Framework利用了极具描写性的定名商定,招致类名十分冗杂,如:
Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive
定名抵触成绩可使用定名空间来处理,PHP常量、类和函数可以被组合到定名空间库中。
若何界说定名空间?
默许情形下,一切常量、类和函数名都放在全局空间下,就和PHP撑持定名空间之前一样。
在PHP文件的顶部利用一个关头字namespace就能够界说定名空间,它必需是第一个号令(declare除外),在它后面不克不及呈现非PHP代码、HTML或空格。如:
- // define this code in the 'MyProject' namespace
- namespace MyProject;
-
- // ... code ...
这一行上面的代码都是指定给MyProject定名空间的,为不异代码块嵌套定名空间或界说多个定名空间是不成能的,假如你真如许干,只要最初一个定名空间才干辨认,但你可以在统一个文件中界说分歧的定名空间代码,如:
- namespace MyProject1;
- // PHP code for the MyProject1 namespace
-
- namespace MyProject2;
- // PHP code for the MyProject2 namespace
-
- // Alternative syntax
- namespace MyProject3 {
- // PHP code for the MyProject3 namespace
- }
- ?>
虽然这么干是可以的,但我建议你不要这么做,最好仍是每一个文件中只界说一个定名空间,以免把你弄懵懂了。
子定名空间
PHP答应界说具有条理的定名空间以便库可以细分,子定名空间利用一个反斜线字符(\)分隔,如:
◆MyProject\SubName
◆MyProject\Database\MySQL
◆CompanyName\MyProject\Library\Common\Widget1
挪用定名空间代码
在lib1.php文件中咱们利用App\Lib1 namespace定名空间界说了一个常量、一个函数和一个类,如:
lib1.php
- // application library 1
- namespace App\Lib1;
-
- const MYCONST = 'App\Lib1\MYCONST';
-
- function MyFunction() {
- return __FUNCTION__;
- }
-
- class MyClass {
- static function WhoAmI() {
- return __METHOD__;
- }
- }
- ?>
如今咱们可以在另外一个PHP文件包含这段代码,如:
myapp.php
- header('Content-type: text/plain');
- require_once('lib1.php');
-
- echo \App\Lib1\MYCONST . "\n";
- echo \App\Lib1\MyFunction() . "\n";
- echo \App\Lib1\MyClass::WhoAmI() . "\n";
- ?>
在myapp.php中并没有界说定名空间,因而这段代码存在全局空间中,任何对MYCONST、MyFunction和MyClass的直接援用城市掉败,由于它们存在于App\Lib1定名空间中,为了挪用lib1.php中的代码,咱们可以在\App\Lib1定名空间前添加前缀界说一个完整及格的称号,上面是我载入myapp.php时的输入了局:
- App\Lib1\MyFunction
- App\Lib1\MyClass::WhoAmI
完整及格称号可以变得很长,界说长称号,如App-Lib1-MyClass,有一些分明的优点。
根据功能来进行封装等。很多的不懂,在使用搜索引擎查找,或者请教老师和在老师详细的讲解、指导下,都能顺利解决。 |
|