亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php命名空間學習筆記

2024-05-04 21:47:44
字體:
來源:轉載
供稿:網友

1、命名空間是一種特殊的作用域,它包含處于該作用域下的標識符,同時它本身也是一種標識符,可以把命名空間與操作系統的目錄對應起來,一個命名空間相當于一個目錄,命名空間里的類,函數,常量,相當于目錄里的文件,同一個目錄(命名空間)里的文件名不能相同,但是不同的目錄里可以有相同名字的文件.

2、使用命名空間為了解決什么問題?

解決名字沖突,比如定義了一個類,正好這個類與PHP內部的類或是include進來的一個類庫里的類重名了.

提高代碼可讀性,命名空間有一個別名功能,它可以幫你給一個長達十幾個字符的類名起一個別名,從而縮短代碼,也不用擔心與其他空間的命名沖突.

3、哪一些代碼會受命名空間的影響.

三類:類、函數、常量。只有它們兄弟三受影響,其他的該干嘛,還干嘛去,說到常量,php 5.3以后可以使用const關鍵字來定義常量,5.3這前使用define,命名空間只對const關鍵字有效.

4、命名空間如何定義,代碼如下:

  1. namespace MyProject; 
  2. const CONNECT_OK = 1;//php5.3以后 
  3. class Connection { /* ... */ } 
  4. function connect() { /* ... */  } 
  5. #例子二 
  6. namespace MyProjectSubLevel; 
  7. const CONNECT_OK = 1;//php5.3以后 
  8. class Connection { /* ... */ } 
  9. function connect() { /* ... */  } 

使用 `namespace 空間名` 來申明一個空間,在namespace之前除了declare語句不能有任何其他php語句,同時也不能有任何非php代碼,連空格都不能有.

以下為錯誤的形式,代碼如下:

$a = 1;namespace MyProject;

//Fatal error: Namespace declaration statement has to be the very first statement in the script...

另外同一個命名空間是可以定義在多個文件中,這對于組織框架是非常有用的,即以同一個namespace MyProject;開頭的文件,它們是同一個命名空間,所以注意文件之間可不要有相同的類/函數/常量名.

當然同一個文件也可以定義多個命名空間,不過非常不建議這樣做的(了解同一個文件定義多個命名空間)

5、命名空間如何使用

命名空間有三種使用形式:

非限定名稱 -- 沒有使用任何的分割符,直接使用類/函數/常量名,如:new Foo(); foo(); echo FOO; 當文件有使用命名空間時,代碼如下:

  1. namespace MyObject; 
  2. new Foo(); // 調用MyObjectFoo(); 
  3. foo(); //調用MyObjectFoo(); 
  4. echo FOO; //調用MyObjectFOO;   

非完全限定名稱 -- 不是以分割符開頭,如 new SubFoo(); 這種形式與非限定名稱方式一樣,代碼如下:

namespace MyObject; new SubFoo(); //調用MyObjectSubFoo();

完全限定名稱 -- 以分割符開頭的方式,相當于操作系統里的絕對地址,如 new OtherNSFoo();代碼如下:

namespace MyObject; new OtherNSFoo(); //調用OtherNsFoo();不管MyObject命名空間.

Tip:對于函數和常量,還有一個特殊的地方(后備全局函數/常量).代碼如下:

  1. namespace MyObject; 
  2. funcname(); //如果MyObjectFuncname存在則調用MyObjectFuncname(),否則試著調用funcname(); echo FOO; //同上 

對于類,也有一個特殊的地方,代碼如下:

  1. namespace MyObject; 
  2. new Foo(); //*如果MyObjectFoo存在,調用之,如果不存在,調用__autoload試著加載MyObjectFoo類進來 

注意對于類是不會去自動去調用全局作用域下的類的.之前說了,命名空間還有一個用途-取別名,代碼如下:

  1. namespace MyObject; 
  2. use OtherNSSub as Other; 
  3. use OtherNSSub2; //相當于use OtherNSSub2 as Sub2; 
  4. use /MyClass; 
  5. new Foo(); //調用MyObjectFoo(); 
  6. new OtherFoo(); //調用 OtherNSSubFoo(); 
  7. new Sub2Foo(); //調用OtherNSSub2Foo(); 
  8. new MyClass(); //調用MyClass(); 

6、動態命名空間

動態總是能讓人摸不著頭腦,然而又帶來靈活性,命名空間同樣可以使用動態語言特點,但要注意由于直接調用命名空間是編譯時解析的,而動態特征并非編譯時解析,所以一定要加前綴,代碼如下:

  1. namespace MyObjectSub; 
  2. new Foo(); //調用 MyObjectSubFoo(), //編譯時已經解析成MyObjectSubFoo 
  3. $a = 'Foo'
  4. new $a(); //調用的是Foo(),而不是MyObjectSubFoo() 
  5. $b = 'MyObjectSubFoo'//等價于 MyObjectSubFoo 
  6. new $b(); //調用MyObjectSubFoo() 
  7. //如果使用雙引號,要用/,如 $a = "/MyObject/Sub"; 

附1:同一個文件定義多個命名空間,方法有兩種:

  1. namespace MyProject; 
  2. const CONNECT_OK = 1; 
  3. class Connection { /* ... */ } 
  4. function connect() { /* ... */  } 
  5. namespace AnotherProject; 
  6. const CONNECT_OK = 1; 
  7. class Connection { /* ... */ } 
  8. function connect() { /* ... */  } 

方法一,記流水帳,代碼如下:

  1. namespace MyProject { 
  2. const CONNECT_OK = 1; 
  3. class Connection { /* ... */ } 
  4. function connect() { /* ... */  } 
  5. namespace AnotherProject { 
  6. const CONNECT_OK = 1; 
  7. class Connection { /* ... */ } 
  8. function connect() { /* ... */  } 
  9. namespace { //全局 
  10. const CONNECT_OK = 1; 
  11. class Connection { /* ... */ } 
  12. function connect() { /* ... */  } 

方法二,使用大括號把同一個命名空間的代碼放在大括號里,這種方法,要求在大括號外不能有任何除了declare之外的代碼,對于全局作用域的代碼使用沒有空間名的大括號包圍起來.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品98久久久久久中文字幕| 成人天堂噜噜噜| 国产一区二中文字幕在线看| 成人免费观看49www在线观看| 91热福利电影| 欧美日韩中文字幕在线| 日韩精品免费在线观看| 久久久影视精品| 亚洲www在线观看| 综合网中文字幕| 日韩av电影免费观看高清| 中文字幕精品久久久久| 日韩在线观看免费av| 78色国产精品| 亚洲裸体xxxx| 久久成年人视频| 亚洲视频一区二区三区| 久久伊人精品视频| 亚洲国产高清福利视频| 国产精品青草久久久久福利99| 91av国产在线| 亚洲精品成人av| 97在线视频一区| 国产91精品黑色丝袜高跟鞋| 精品亚洲一区二区三区在线观看| 欧美精品亚州精品| 欧美性高跟鞋xxxxhd| 亚洲人成网站999久久久综合| 日韩av影院在线观看| 亚洲精品电影网站| 91精品国产91久久久久久吃药| 成人久久18免费网站图片| 欧美裸体xxxx极品少妇软件| 日韩av在线最新| 97精品视频在线| 国产精品免费一区二区三区都可以| 亚洲精品国产品国语在线| 亚洲欧美激情精品一区二区| 97人洗澡人人免费公开视频碰碰碰| 国产成人精品a视频一区www| 91精品国产色综合久久不卡98| 国产精品大陆在线观看| 亚洲va电影大全| 国产成人福利视频| 亚洲xxxxx电影| 久久精品视频播放| 欧美视频中文在线看| 国产一区香蕉久久| 色中色综合影院手机版在线观看| 日本精品va在线观看| 91久久精品日日躁夜夜躁国产| 高清一区二区三区四区五区| 狠狠躁天天躁日日躁欧美| 国产精品美女网站| 97视频免费在线看| 久久久在线观看| 国产亚洲欧美日韩一区二区| 亚洲精品美女免费| 日本欧美黄网站| 久久亚洲精品成人| 日韩在线视频网| 久久久久久com| 国产欧美久久久久久| 亚洲男人的天堂在线播放| 成人福利视频在线观看| 国产欧美在线观看| 国产日韩欧美一二三区| 精品国产欧美一区二区三区成人| 岛国av一区二区三区| 亚洲视频日韩精品| 日产日韩在线亚洲欧美| 68精品国产免费久久久久久婷婷| 国产91色在线免费| 91精品国产高清久久久久久| 久久视频中文字幕| 日本午夜精品理论片a级appf发布| 国产精品第一区| 日韩国产精品视频| 国产一区私人高清影院| 久久久视频在线| 69久久夜色精品国产69| 久久99久久亚洲国产| 国产精品久久久久久久久久久久久久| 国产va免费精品高清在线| 国产精品视频成人| 成人免费视频xnxx.com| 欧美激情第1页| 久久久免费高清电视剧观看| 伊人成人开心激情综合网| 亚洲欧美在线一区二区| 欧美日韩国产在线看| 国外成人在线直播| 三级精品视频久久久久| 日韩av片免费在线观看| 日韩免费在线电影| 亚洲国产成人av在线| 亚洲国产一区二区三区四区| 永久免费毛片在线播放不卡| 97香蕉超级碰碰久久免费软件| 国产精品极品在线| 欧美视频一区二区三区…| 国产一区二区黄| 亚洲国产一区二区三区在线观看| 91经典在线视频| 亚洲成**性毛茸茸| 欧美日韩另类视频| 久久精彩免费视频| 欧美韩国理论所午夜片917电影| 国产视频一区在线| 81精品国产乱码久久久久久| 日韩一区二区精品视频| 亚洲欧美日韩中文在线制服| 亚洲欧美999| 性色av一区二区咪爱| 成人xxxxx| 国产精品极品美女粉嫩高清在线| 视频一区视频二区国产精品| 日韩欧美国产中文字幕| 91免费精品视频| 欧美最猛性xxxxx亚洲精品| 国产色视频一区| 97在线视频观看| 亚洲成av人片在线观看香蕉| 中文欧美日本在线资源| 亚洲精品成人久久电影| 国产精品吊钟奶在线| 欧美在线视频一区| 国产ts一区二区| 精品久久久久久久久久久久久| 日产精品99久久久久久| 国产精品吹潮在线观看| 亚洲一区二区三区四区在线播放| 国产一区二区黑人欧美xxxx| 亚洲一区二区三区sesese| 国产精品成人久久久久| 久久久久国色av免费观看性色| 欧美国产视频一区二区| 精品久久久久久| 亚洲大尺度美女在线| 日韩av网站导航| 欧美日韩久久久久| 日韩精品免费在线观看| 91老司机在线| 夜夜嗨av一区二区三区四区| 国精产品一区一区三区有限在线| 91精品国产乱码久久久久久蜜臀| 欧美精品日韩三级| 国产一区二区黄| 午夜精品www| 在线电影av不卡网址| 久热爱精品视频线路一| 久久不射热爱视频精品| 免费av在线一区| 久久久中文字幕| 成人国产精品久久久久久亚洲| 91成人在线视频| 成人欧美一区二区三区黑人| 久久国产精品偷| 欧美午夜丰满在线18影院| 97国产suv精品一区二区62| 亚洲无限av看| 亚洲精品国产免费| 久久久久久尹人网香蕉| 欧美精品一区二区免费|