一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php命名空間學(xué)習(xí)詳解

1、什么是命名空間?
命名空間是一種特殊的作用域,它包含處于該作用域下的標(biāo)識(shí)符,同時(shí)它本身也是一種標(biāo)識(shí)符??梢园衙臻g與操作系統(tǒng)的目錄對(duì)應(yīng)起來(lái)。一個(gè)命名空間相當(dāng)于一個(gè)目錄,命名空間里的類,函數(shù),常量,相當(dāng)于目錄里的文件。同一個(gè)目錄(命名空間)里的文件名不能相同,但是不同的目錄里可以有相同名字的文件。
2、使用命名空間為了解決什么問(wèn)題?
解決名字沖突,比如定義了一個(gè)類,正好這個(gè)類與php內(nèi)部的類或是include進(jìn)來(lái)的一個(gè)類庫(kù)里的類重名了。
提高代碼可讀性,命名空間有一個(gè)別名功能,它可以幫你給一個(gè)長(zhǎng)達(dá)十幾個(gè)字符的類名起一個(gè)別名,從而縮短代碼,也不用擔(dān)心與其他空間的命名沖突。
3、哪一些代碼會(huì)受命名空間的影響。
三類:類、函數(shù)、常量。只有它們兄弟三受影響,其他的該干嘛,還干嘛去。說(shuō)到常量,php 5.3以后可以使用const關(guān)鍵字來(lái)定義常量,5.3這前使用define,命名空間只對(duì)const關(guān)鍵字有效。
4、命名空間如何定義
復(fù)制代碼 代碼如下:
namespace MyProject;
const CONNECT_OK = 1;//php5.3以后
class Connection { /* ... */ }
function connect() { /* ... */  }
#例子二
namespace MyProjectSubLevel;
const CONNECT_OK = 1;//php5.3以后
class Connection { /* ... */ }
function connect() { /* ... */  }

使用 `namespace 空間名` 來(lái)申明一個(gè)空間,在namespace之前除了declare語(yǔ)句不能有任何其他php語(yǔ)句,同時(shí)也不能有任何非php代碼,連空格都不能有。
以下為錯(cuò)誤的形式:
復(fù)制代碼 代碼如下:
$a = 1;
namespace MyProject;
?>www.jb51.NET
//Fatal error: Namespace declaration statement has to be the very first statement in the script...

另外同一個(gè)命名空間是可以定義在多個(gè)文件中,這對(duì)于組織框架是非常有用的。即以同一個(gè)namespace MyProject;開頭的文件,它們是同一個(gè)命名空間。所以注意文件之間可不要有相同的類/函數(shù)/常量名哦。
當(dāng)然同一個(gè)文件也可以定義多個(gè)命名空間,不過(guò)非常不建議這樣做的。(了解同一個(gè)文件定義多個(gè)命名空間)
5、命名空間如何使用
命名空間有三種使用形式:
. 非限定名稱 -- 沒有使用任何的分割符,直接使用類/函數(shù)/常量名,如:new Foo(); foo(); echo FOO; 當(dāng)文件有使用命名空間時(shí),
復(fù)制代碼 代碼如下:
<?php
namespace MyObject;
new Foo(); // 調(diào)用MyObjectFoo();
foo(); //調(diào)用MyObjectFoo();
echo FOO; //調(diào)用MyObjectFOO;    

非完全限定名稱 -- 不是以分割符開頭,如 new SubFoo(); 這種形式與非限定名稱方式一樣。
復(fù)制代碼 代碼如下:
<?php
namespace MyObject; new SubFoo(); //調(diào)用MyObjectSubFoo();

完全限定名稱 -- 以分割符開頭的方式,相當(dāng)于操作系統(tǒng)里的絕對(duì)地址。如 new OtherNSFoo();
復(fù)制代碼 代碼如下:
<?php
namespace MyObject; new OtherNSFoo(); //調(diào)用OtherNsFoo(); 不管MyObject命名空間。

Tip: 對(duì)于函數(shù)和常量,還有一個(gè)特殊的地方(后備全局函數(shù)/常量)。
復(fù)制代碼 代碼如下:
<?php
namespace MyObject;
funcname(); //如果MyObjectFuncname存在則調(diào)用MyObjectFuncname(),否則試著調(diào)用funcname(); echo FOO; //同上。

對(duì)于類,也有一個(gè)特殊的地方。
復(fù)制代碼 代碼如下:
<?php
namespace MyObject;
new Foo(); //*如果MyObjectFoo存在,調(diào)用之,如果不存在,調(diào)用__autoload試著加載MyObjectFoo類進(jìn)來(lái)。
//注意對(duì)于類是不會(huì)去自動(dòng)去調(diào)用全局作用域下的類的。

之前說(shuō)了,命名空間還有一個(gè)用途-取別名。
復(fù)制代碼 代碼如下:
namespace MyObject;
use OtherNSSub as Other;
use OtherNSSub2; //相當(dāng)于use OtherNSSub2 as Sub2;
use /MyClass;
new Foo(); //調(diào)用MyObjectFoo();
new OtherFoo(); //調(diào)用 OtherNSSubFoo();
new Sub2Foo(); //調(diào)用OtherNSSub2Foo();
new MyClass(); //調(diào)用MyClass();

6、動(dòng)態(tài)命名空間
動(dòng)態(tài)總是能讓人摸不著頭腦,然而又帶來(lái)靈活性。命名空間同樣可以使用動(dòng)態(tài)語(yǔ)言特點(diǎn),但要注意由于直接調(diào)用命名空間是編譯時(shí)解析的,而動(dòng)態(tài)特征并非編譯時(shí)解析。所以一定要加前綴。如:
復(fù)制代碼 代碼如下:
namespace MyObjectSub;
new Foo(); //調(diào)用 MyObjectSubFoo(), 編譯時(shí)已經(jīng)解析成MyObjectSubFoo
$a = 'Foo';
new $a(); //調(diào)用的是Foo(),而不是MyObjectSubFoo()
$b = 'MyObjectSubFoo'; //等價(jià)于 MyObjectSubFoo
new $b(); //調(diào)用MyObjectSubFoo()
//如果使用雙引號(hào),要用/,如 $a = "/MyObject/Sub";

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

復(fù)制代碼 代碼如下:
namespace MyProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
namespace AnotherProject;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }

方法一,記流水帳。
復(fù)制代碼 代碼如下:
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { //全局
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

方法二,使用大括號(hào)把同一個(gè)命名空間的代碼放在大括號(hào)里。這種方法,要求在大括號(hào)外不能有任何除了declare之外的代碼。對(duì)于全局作用域的代碼使用沒有空間名的大括號(hào)包圍起來(lái)。

php技術(shù)php命名空間學(xué)習(xí)詳解,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 中文字幕日韩精品有码视频 | 一区二区高清在线观看 | 青青草一区二区免费精品 | 玖玖爱精品视频 | 思99re久久这里只有精品首页 | 精品视频久久久 | 免费看污成人午夜网站 | www婷婷 | 91在线高清视频 | 91精品国产免费自在线观看 | 香蕉人人超人人超免费看视频 | 免费一级特黄欧美大片勹久久网 | 久久婷婷午色综合夜啪 | 成人精品国产亚洲欧洲 | 天天爱综合网 | 日本一区二区三区久久 | 婷婷99视频精品全部在线观看 | 亚洲爱色 | 欧洲精品码一区二区三区免费看 | 69国产成人综合久久精 | 色多多www | 亚洲综合色婷婷 | 桃花综合久久久久久久久久网 | 国产欧美亚洲精品 | 五月婷色| 激情丁香网 | 国产短视频在线 | 国产成人咱精品视频免费网站 | 国语自产精品视频在线第 | 欧美在线看欧美高清视频免费 | 亚洲国产精品成人综合色在线婷婷 | 久久99国产精品久久99软件 | 亚洲综合色婷婷在线观看 | 加勒比一区在线 | 涩涩涩涩涩涩涩涩涩涩 | 午夜视频一区二区 | 亚洲成a人一区二区三区 | 国产成人盗拍精品免费视频 | 国产最新精品精品视频 | 色视频在线看 | 国内精品福利在线视频 |