精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

PHP命名空間規則解析及高級功能

譯文
開發 后端
日前發布的PHP 5.3中,最重要的一個新特性就是命名空間的加入。本文介紹了PHP命名空間的一些術語,其解析規則,以及一些高級功能的應用,希望能夠幫助讀者在項目中真正使用命名空間。

【51CTO精選譯文】在第一部分中我們介紹了PHP命名空間的用途和namespace關鍵字,在這篇文章中我們將介紹一下use命令的使用以及PHP如何解析命名空間的名字的。

為了便于對比,我定義了兩個幾乎一樣的代碼塊,只有命名空間的名字不同。

lib1.php

  1. < ?php  
  2. // application library 1  
  3. namespace App\Lib1;  
  4.  
  5. const MYCONST = 'App\Lib1\MYCONST';  
  6.  
  7. function MyFunction() {  
  8.  return __FUNCTION__;  
  9. }  
  10.  
  11. class MyClass {  
  12.  static function WhoAmI() {  
  13. eturn __METHOD__;  
  14.  }  
  15. }  
  16. ?>  

lib2.php

  1. < ?php  
  2. // application library 2  
  3. namespace App\Lib2;  
  4.  
  5. const MYCONST = 'App\Lib2\MYCONST';  
  6.  
  7. function MyFunction() {  
  8.  return __FUNCTION__;  
  9. }  
  10.  
  11. class MyClass {  
  12.  static function WhoAmI() {  
  13. eturn __METHOD__;  
  14.  }  
  15. }  
  16. ?>  

開始之前先要理解幾個PHP命名空間相關術語。

◆完全限定名稱(Fully-qualified name)

任何PHP代碼都可以引用完全限定名稱,它是一個以命名空間反斜線開頭的標識符,如\App\Lib1\MYCONST,\App\Lib2\MyFunction( )等。

完全限定名稱是沒有任何歧義的,開頭的反斜線和文件路徑的作用有點類似,它表示“根”全局空間,如果我們在全局空間中實現了一個不同的MyFunction( ),可以使用\MyFunction( )從lib1.php或lib2.php調用它。

完全限定名稱對一次性函數調用或對象初始化非常有用,但當你產生了大量的調用時它們就沒有實用價值了,在下面的討論中我們將會看到,PHP提供了其它選項以解除我們為命名空間打字的煩惱。

◆限定名稱(Qualified name)

至少有一個命名空間分隔符的標識符,如Lib1\MyFunction( )。

◆非限定名稱(Unqualified name)

沒有命名空間分隔符的標識符,如MyFunction( )。

在相同的命名空間內工作

仔細思考下面的代碼:

myapp1.php

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. require_once('lib1.php');  
  5. require_once('lib2.php');  
  6.  
  7. header('Content-type: text/plain');  
  8. echo MYCONST . "\n";  
  9. echo MyFunction() . "\n";  
  10. echo MyClass::WhoAmI() . "\n";  
  11. ?>  

即使我們同時包括了lib1.php和lib2.php,MYCONST,MyFunction和MyClass標識符只能在lib1.php中引用,這是因為myapp1.php的代碼在相同的App\Lib1命名空間內。

執行結果:

  1. App\Lib1\MYCONST  
  2. App\Lib1\MyFunction  
  3. App\Lib1\MyClass::WhoAmI  

命名空間導入

可以使用use操作符導入命名空間,如:

myapp2.php

  1. < ?php  
  2. use App\Lib2;  
  3.  
  4. require_once('lib1.php');  
  5. require_once('lib2.php');  
  6.  
  7. header('Content-type: text/plain');  
  8. echo Lib2\MYCONST . "\n";  
  9. echo Lib2\MyFunction() . "\n";  
  10. echo Lib2\MyClass::WhoAmI() . "\n";  
  11. ?>  

可以定義任意數量的use語句,或使用逗號分隔成獨立的命名空間,在這個例子中我們導入了App\Lib2命名空間,但我們仍然不能直接引用MYCONST,MyFunction和MyClass,因為我們的代碼還在全局空間中,但如果我們添加了“Lib2\”前綴,它們就變成限定名稱了,PHP將會搜索導入的命名空間,直到找到匹配項。

執行結果:

  1. App\Lib2\MYCONST  
  2. App\Lib2\MyFunction  
  3. App\Lib2\MyClass::WhoAmI 

命名空間別名

命名空間別名可能是最有用的構想了,別名允許我們使用較短的名稱引用很長的命名空間。

myapp3.php

  1. < ?php  
  2. use App\Lib1 as L;  
  3. use App\Lib2\MyClass as Obj;  
  4.  
  5. header('Content-type: text/plain');  
  6. require_once('lib1.php');  
  7. require_once('lib2.php');  
  8.  
  9. echo L\MYCONST . "\n";  
  10. echo L\MyFunction() . "\n";  
  11. echo L\MyClass::WhoAmI() . "\n";  
  12. echo Obj::WhoAmI() . "\n";  
  13. ?>  

第一個use語句將App\Lib1定義為“L”,任何使用“L”的限定名稱在編譯時都會被翻譯成“App\Lib1”,因此我們就可以引用L\MYCONST和L\MyFunction而不是完全限定名稱了。

第二個use語句定義了“obj”作為App\Lib2\命名空間中MyClass類的別名,這種方式只適合于類,不能用于常量和函數,現在我們就可以使用new Obj( )或象上面那樣運行靜態方法了。

執行結果:

  1. App\Lib1\MYCONST  
  2. App\Lib1\MyFunction  
  3. App\Lib1\MyClass::WhoAmI  
  4. App\Lib2\MyClass::WhoAmI  

PHP命名解析規則

PHP標識符名稱使用下列命名空間規則進行解析,請參考PHP用戶手冊了解更詳細的信息:

1.在編譯時調用完全限定函數、類或常量;

2.非限定名稱和限定名稱根據導入規則進行翻譯,例如,如果A\B\C導入為C,調用C\D\e( )就會被翻譯成A\B\C\D\e( );

3.在PHP命名空間內,所有限定名稱尚未根據導入規則轉換,例如,如果在命名空間A\B中調用C\D\e( ),那么會被翻譯成A\B\C\D\e( );

4.非限定類名稱根據當前的導入規則進行轉換,使用全名替換導入的短名稱,例如,如果類C在命名空間A\B中被導入為X,那么new X( )就會被翻譯為new A\B\C( );

5.在命名空間中非限定函數調用在運行時解析,例如,如果MyFunction( )在命名空間A\B中被調用,PHP首先會查找函數\A\B\MyFunction( ),如果沒有找到,然后會在全局空間中查找\MyFunction( );

6.調用非限定或限定類名在運行時被解析,例如,如果我們在命名空間A\B中調用new C( ),PHP將會查找類A\B\C,如果沒有找到,PHP會嘗試自動載入A\B\C。

#p#

PHP命名空間高級特性

接下來讓我們看一看PHP命名空間的一些高級特性。

__NAMESPACE__常量

__NAMESPACE__是一個PHP字符串,它總是返回當前命名空間的名稱,在全局空間中它是一個空字符串。

  1. < ?php  
  2. namespace App\Lib1;  
  3. echo __NAMESPACE__; // outputs: App\Lib1  
  4. ?>  
  5.  

這個值在調試時非常有用,它也可由于動態生成一個完全限定類名,如:

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9.  
  10. $c = __NAMESPACE__ . '\\MyClass';  
  11. $m = new $c;  
  12. echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI  
  13. ?>  

namespace關鍵字

namespace關鍵字可以用于明確引用一個當前命名空間或子命名空間中的項目,它等價于類中的self命名空間:

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9.  
  10. $m = new namespace\MyClass;  
  11. echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI  
  12. ?>  

自動載入命名空間類

PHP 5中最省時省力的特性是自動載入,在全局(非命名空間)PHP代碼中,可以寫一個標準自動載入函數:

  1. < ?php  
  2. $objnew MyClass1(); // classes/MyClass1.php is auto-loaded  
  3. $objnew MyClass2(); // classes/MyClass2.php is auto-loaded  
  4.  
  5. // autoload function  
  6. function __autoload($class_name) {  
  7.  require_once("classes/$class_name.php");  
  8. }  
  9. ?>  

在PHP 5.3中,你可以創建一個命名空間類的實例,在這種情況下,完全限定命名空間和類名傳遞給__autoload函數,例如,$class_name的值可能是App\Lib1\MyClass。你可以在相同的文件夾下放置所有的PHP類文件,從字符串中提取命名空間,但那樣會導致文件名沖突。

另外,你的類文件層次結構會按照命名空間的結構重新組織,例如,MyClass.php文件可以創建在/classes/App/Lib1文件夾下:

/classes/App/Lib1/MyClass.php

  1. < ?php  
  2. namespace App\Lib1;  
  3.  
  4. class MyClass {  
  5.  public function WhoAmI() {  
  6. return __METHOD__;  
  7.  }  
  8. }  
  9. ?>  

在根文件夾下的文件就使用下面的代碼了:

myapp.php

  1. < ?php  
  2. use App\Lib1\MyClass as MC;  
  3.  
  4. $obj = new MC();  
  5. echo $obj->WhoAmI();  
  6.  
  7. // autoload function  
  8. function __autoload($class) {  
  9.  // convert namespace to full file path  
  10.  $class = 'classes/' . str_replace('\\', '/', $class) . '.php';  
  11.  require_once($class);  
  12. }  
  13. ?>  

解釋:

1.類App\Lib1\MyClass的別名是MC;

2. new MC( )在編譯時被翻譯成new App\Lib1\MyClass( );

3.字符串App\Lib1\MyClass被傳遞給__autoload函數,使用文件路徑正斜線替換所有命名空間中的反斜線,然后修改字符串,classes\App\Lib1\MyClass.php文件被自動載入;

總結

有關PHP命名空間的使用就介紹到這里,希望您能夠對PHP的命名空間有一個新的認識,并希望你能在新項目中真正使用命名空間。

原文:How to Use PHP Namespaces

作者:Craig Buckler

【編輯推薦】

  1. PHP 5.3中的命名空間:你用過了么?
  2. PHP 5.3中的命名空間使用方法淺述
  3. PHP 5.3.0發布 新增命名空間等多項特性
  4. PHP的命名空間
  5. PHP 5.3閉包語法初探
責任編輯:yangsai 來源: 51CTO.com
相關推薦

2009-11-18 16:58:55

PHP命名規則

2010-07-05 16:33:00

PHPPHP命名空間

2010-08-06 10:41:59

Flex命名空間

2009-09-21 08:50:42

.NET中文變量

2011-03-16 14:23:38

分布式文件

2009-07-20 10:18:49

PHP 5.3命名空間

2009-07-01 09:32:11

PHP 5.3.0

2010-01-12 17:32:49

H3C交換機命名規則

2010-09-01 13:44:23

idclassCSS

2009-07-17 09:31:06

PHP 5.3命名空間

2010-08-25 09:11:57

DIVCSS

2012-08-24 09:05:30

IBMdW

2010-09-07 15:53:02

CSS規范化

2010-09-08 16:49:05

CSSclassid

2010-08-30 10:46:13

DIV+CSS

2013-08-21 16:48:42

.Net命名空間

2009-08-27 15:34:38

C#命名空間

2009-09-11 09:22:14

System.Linq

2009-08-12 10:46:54

C#命名空間

2009-08-28 13:56:25

C#反射命名空間
點贊
收藏

51CTO技術棧公眾號

大地资源二中文在线影视观看| 日本不卡二区高清三区| 中文字幕av播放| 69精品国产久热在线观看| 五月天中文字幕一区二区| 欧美日韩视频在线一区二区观看视频| 国产在线视频你懂的| 五月国产精品| 777亚洲妇女| 麻豆tv在线播放| 五月婷婷在线视频| 成人aa视频在线观看| 国产精品成人品| 唐朝av高清盛宴| 九一亚洲精品| 精品日产卡一卡二卡麻豆| 少妇高清精品毛片在线视频| 成人日批视频| 国产亚洲制服色| 欧美中文字幕亚洲一区二区va在线| 欧美亚洲丝袜| 99久久精品国产一区色| 久久永久免费| 久久久久久这里只有精品| 亚洲AV无码成人精品区明星换面| 国产精品欧美一区二区三区不卡 | 97人妻天天摸天天爽天天| 日韩黄色三级在线观看| 欧美性生交xxxxxdddd| 91麻豆天美传媒在线| 国产在线高清| 99精品国产99久久久久久白柏| 国产精品视频在线观看| 青青草成人av| 激情综合自拍| 欧美大片va欧美在线播放| 色www亚洲国产阿娇yao| 亚洲人成精品久久久| 337p日本欧洲亚洲大胆色噜噜| 亚洲77777| 日韩欧美看国产| 亚洲不卡av一区二区三区| 老司机午夜网站| www.亚洲.com| 日本一区二区免费在线| 欧美日韩在线播放一区二区| 亚洲av成人无码久久精品老人| 国产麻豆一精品一av一免费| 国产日韩欧美视频在线| 国产乡下妇女三片| 三级影片在线观看欧美日韩一区二区| 久久天天躁狠狠躁夜夜躁| www.日本高清视频| 青青草原综合久久大伊人精品| 亚洲精品美女在线观看播放| 成人午夜精品无码区| 动漫3d精品一区二区三区乱码| 欧美一区国产二区| 黄色片免费网址| 精品国产亚洲一区二区三区在线 | 一区二区视频免费观看| 日韩高清在线电影| 国产精品va在线播放我和闺蜜| 日韩和一区二区| 亚洲激情精品| 97香蕉久久超级碰碰高清版| 激情五月色婷婷| 国产美女诱惑一区二区| 日本一欧美一欧美一亚洲视频| 亚洲免费在线观看av| 国产一区二区三区久久| 热门国产精品亚洲第一区在线| 日本免费在线播放| 亚洲高清久久| 热re91久久精品国99热蜜臀| 中文字幕日韩免费| 全国精品久久少妇| 91免费国产网站| 亚洲精品国产精| 99久久久免费精品国产一区二区| 国产精品一区二区三区在线观| 韩国av永久免费| 91麻豆视频网站| 日日噜噜噜噜夜夜爽亚洲精品| 国产亚洲依依| 亚洲日本丝袜连裤袜办公室| 日b视频免费观看| 中文在线中文资源| 欧美视频在线一区二区三区 | 在线不卡日本| 日本欧美电影在线观看| 欧美午夜视频一区二区| 三上悠亚在线一区二区| 欧美欧美在线| 亚洲欧美三级在线| 91制片厂在线| 亚洲美女视频在线免费观看 | 99亚洲伊人久久精品影院| 欧美女孩性生活视频| 蜜臀av粉嫩av懂色av| 精品日本12videosex| 欧美大片在线免费观看| jizz国产在线观看| 国产一区二区免费在线| 久中文字幕一区| www久久日com| 日本精品免费观看高清观看| 中文字幕一区二区三区人妻在线视频| 成人性生交大片免费看96| 国产一区二区免费| 国产污片在线观看| 久久狠狠亚洲综合| 久久国产精品一区二区三区四区| 日本在线观看| 欧美视频在线观看免费网址| 亚洲精品乱码久久久久久9色| 亚洲区小说区| 国内久久久精品| 91丨九色丨蝌蚪丨对白| 久久免费视频色| 久久福利一区二区| 久久青草免费| 亚洲午夜av久久乱码| 国产无精乱码一区二区三区| 狠狠色丁香久久婷婷综合丁香| 久久精品日韩精品| 国内高清免费在线视频| 7777精品伊人久久久大香线蕉最新版| 中文字幕1区2区| 天天综合网91| 国产精品青草久久久久福利99| 亚洲第一视频在线| 亚洲色图另类专区| 色综合色综合色综合色综合| 免费久久久久久久久| 国内精品久久久久久| a级片免费观看| 中文字幕亚洲在| 日本激情视频在线播放| 国产精品一区二区av交换| 91精品国产高清自在线| 人妻无码一区二区三区久久99| 欧美经典一区二区三区| 国产精品无码一本二本三本色| 精品伊人久久久| 久久久亚洲国产天美传媒修理工| 99久久久国产精品无码免费| 亚洲欧美欧美一区二区三区| 国产亚洲视频一区| 国产精品久久久久蜜臀| 国产专区欧美专区| 男人的天堂在线视频免费观看| 91国产精品成人| 丁香花五月婷婷| 蜜桃久久久久久| 亚洲精品8mav| 四虎精品一区二区免费| 久久夜色精品国产欧美乱| 国产情侣在线播放| 一区二区国产视频| 久久精品aⅴ无码中文字字幕重口| 999久久久免费精品国产| 国产精品一区二区久久国产| 麻豆视频在线免费观看| 91精品国产色综合久久不卡电影 | 中文字幕av一区二区三区人| 日本在线精品视频| 浮生影视网在线观看免费| 欧美网站大全在线观看| 亚洲视频重口味| 国产精品一二二区| 久在线观看视频| 深夜福利久久| 成人免费视频网址| 女同视频在线观看| 日韩国产激情在线| av手机天堂网| 亚洲色图欧美激情| av网页在线观看| 日韩在线a电影| 黄黄视频在线观看| 欧美巨大xxxx| 国产主播精品在线| av成人福利| 国产午夜精品美女视频明星a级| 国产精品国产精品国产| 中文字幕亚洲高清| 麻豆精品91| 亚洲视频小说| 成人知道污网站| 国产高清在线不卡| a在线免费观看| 日韩精品视频在线播放| 一二区在线观看| 污片在线观看一区二区| 国产免费嫩草影院| 国产99久久久国产精品潘金网站| 天堂av在线中文| 亚洲免费福利一区| 91久久极品少妇xxxxⅹ软件| 婷婷六月国产精品久久不卡| 欧美老少配视频| 国产毛片在线看| 亚洲精品在线网站| 中文字幕一级片| 欧美日韩另类视频| 亚洲欧洲综合网| 久久综合久久综合久久| 国内精品国产三级国产aⅴ久| 91久久视频| 国产卡一卡二在线| 欧美男gay| 国产精品久久九九| 粉嫩一区二区三区在线观看| 日本三级久久久| 国产丝袜在线播放| www.精品av.com| 国产小视频在线| 亚洲国产高潮在线观看| 国产精品一区二区三区在线免费观看| 国产精品情趣视频| 精品人妻一区二区三区香蕉| 国产精品自产自拍| 亚洲精品久久久久久宅男| 久久成人亚洲| 国产素人在线观看| 国产精品99一区二区| 一区二区视频在线观看| 精品国产一区二区三区香蕉沈先生 | 中文字幕日韩在线| 热久久这里只有| 国产美女高潮在线| 欧美激情在线观看| 性欧美ⅴideo另类hd| 久久精品成人欧美大片古装| 成人综合影院| 亚洲欧美中文日韩v在线观看| 国产视频在线观看免费| 欧美日韩情趣电影| 久久精品99北条麻妃| 色综合天天综合网天天狠天天| 日本三级欧美三级| 亚洲一区视频在线| 久久一二三四区| 一区二区三区资源| 欧美日韩在线观看成人| 亚洲蜜桃精久久久久久久| 色婷婷粉嫩av| 中文字幕一区日韩精品欧美| 国产91在线播放九色| 亚洲欧洲www| 国产三级aaa| 中文字幕亚洲一区二区va在线| 一级二级黄色片| 国产精品传媒视频| 欧美日韩黄色网| 一级女性全黄久久生活片免费| 欧美性x x x| 一区2区3区在线看| 国产一级特黄aaa大片| 亚洲国产aⅴ天堂久久| www.av麻豆| 日本乱码高清不卡字幕| 中文字字幕在线观看| 91精品国产综合久久蜜臀| 亚洲av无码乱码国产精品久久| 精品国产sm最大网站免费看| 无码国产伦一区二区三区视频| 亚洲国产精品久久91精品| 亚洲色图狠狠干| 国产一区二区三区在线看| 日韩子在线观看| 欧美成人精品在线播放| 韩日毛片在线观看| 国产精品高清在线| 国产一区精品二区| 国产私拍一区| 欧美理论在线播放| 91视频成人免费| 国产婷婷精品| 日本黄色的视频| 成人免费视频播放| 亚洲精品一区二区三区影院忠贞| 中文字幕乱码日本亚洲一区二区| 手机在线中文字幕| 亚洲黄色av一区| 自拍偷拍18p| 日韩视频免费直播| 牛牛澡牛牛爽一区二区| 久久精品夜夜夜夜夜久久| 激情黄产视频在线免费观看| 国产精品丝袜高跟| 超碰精品在线| 亚洲国产激情一区二区三区| 亚洲特级毛片| 国产又大又黄又粗的视频| 国产超碰在线一区| 久久美女免费视频| 亚洲一区在线播放| 中文字幕一级片| 亚洲国产私拍精品国模在线观看| 成人在线观看黄色| 国产69精品久久久| 91国产精品| 国产一区二区在线观看免费播放| 国产99久久久国产精品成人免费| 中文字幕中文字幕在线中一区高清| 亚洲午夜极品| 色91精品久久久久久久久| 91污在线观看| 欧美黄色一级网站| 欧美日韩一区二区在线观看| 午夜视频在线播放| 欧美日韩成人免费| 日韩久久一区| 欧美在线激情| 久久高清一区| 亚洲欧美日韩偷拍| 一区二区三区日韩精品视频| 中文字幕视频二区| 亚洲欧美在线磁力| 韩国成人二区| 国外成人免费视频| 欧美日本一区二区视频在线观看 | 美女露胸视频在线观看| 亚洲一区二区三区久久| 成人3d精品动漫精品一二三| 99精品在线免费视频| 东方欧美亚洲色图在线| 少妇人妻丰满做爰xxx| 欧美日韩国产综合一区二区 | 欧美日韩一级黄色片| 亚洲成av人影院在线观看| 岛国中文字幕在线| 国产精品一区二区三区毛片淫片 | 亚洲国产成人不卡| 久久久国产精品一区二区中文| 免费黄色a级片| 亚洲精品高清视频在线观看| 国产精品探花视频| 色偷偷噜噜噜亚洲男人| 中韩乱幕日产无线码一区| 秋霞在线观看一区二区三区| 日日摸夜夜添夜夜添国产精品 | 给我免费播放日韩视频| 中国老女人av| 国产精品一区在线| 免费一级肉体全黄毛片| 日韩一区二区三免费高清| 黄色一级片在线观看| 川上优av一区二区线观看| 婷婷综合视频| 无码国产精品一区二区高潮| 一区二区三区欧美在线观看| 亚洲女人18毛片水真多| 欧美极品第一页| 乱中年女人伦av一区二区| 国自产拍偷拍精品啪啪一区二区| 成人精品国产一区二区4080 | 精品日韩美女的视频高清| 偷拍精品一区二区三区| 欧美洲成人男女午夜视频| 国产欧美日韩精品一区二区三区| 久久精品国产精品亚洲色婷婷| 91在线视频免费观看| 亚洲GV成人无码久久精品| 夜夜嗨av一区二区三区免费区| 韩国美女久久| 亚洲va韩国va欧美va精四季| 九九在线精品视频| 一区视频免费观看| 亚洲高清不卡av| 亚洲1234区| 在线免费观看一区二区三区| 国产高清成人在线| 伊人久久综合视频| 中文字幕亚洲图片| 欧美日韩黄网站| 黄色片视频在线免费观看| 中日韩av电影| 亚洲精品成av人片天堂无码 | 激情av综合网| 精品肉丝脚一区二区三区| 日韩经典中文字幕| 日韩在线电影| 男女视频网站在线观看| 亚洲国产激情av| 囯产精品一品二区三区| 国产精品成人v| 极品裸体白嫩激情啪啪国产精品| 日本少妇色视频| 这里只有精品电影| 欧美gv在线观看| 偷拍盗摄高潮叫床对白清晰| av动漫一区二区| 亚洲一区二区色| 97超级碰在线看视频免费在线看| 日韩精品欧美激情一区二区| 极品白嫩少妇无套内谢| 欧美亚洲一区三区|