亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何理解PHP核心特性命名空間

瀏覽:4日期:2022-09-07 10:46:51
目錄提出定義使用限定符在內(nèi)部訪問(wèn)命名空間轉(zhuǎn)義符號(hào)提出

PHP 在 5.3 后提出了命名空間用來(lái)解決組件之間的命名沖突問(wèn)題,主要參考了文件系統(tǒng)的設(shè)計(jì):

同一個(gè)目錄下不允許有相同的文件名 - 同一個(gè)命名空間下不允許有相同的類(lèi); 不同的目錄可以有同名文件 - 不同的命名空間可以有相同的類(lèi);定義

使用namespace關(guān)鍵字來(lái)定義一個(gè)命名空間。其中,頂層命名空間通常為廠商名,不同開(kāi)發(fā)者的廠商命名空間是唯一的。命名空間不需要與文件目錄一一對(duì)應(yīng),但是最好遵守PSR-4規(guī)范。

<?phpnamespace SymfonyComponentHttpFoundation;class Request {}命名空間必須在所有代碼之前聲明,唯一的例外就是 declare 關(guān)鍵字。<?phpdeclare(strict_types=1);namespace App;

命名空間內(nèi)可包含任意 PHP 代碼,但是僅對(duì)類(lèi) (包括抽象類(lèi)和 Trait)、接口、函數(shù)和常量這四種類(lèi)型生效。

<?phpnamespace MyProject;const CONNECT_OK = 1;class FOO {}interface Foo{}function foo() {}使用

使用use關(guān)鍵字來(lái)引入命名空間

<?phpnamespace App;use SymfonyComponentHttpFoundationRequest;use FooBar;class Test { public function run() {$bar = new Bar(); }}

定義和使用推薦遵循PSR-2的規(guī)范

namespace之后必須存在一個(gè)空行; 所有use聲明必須位于namespace聲明之后; 每條use聲明必須只有一個(gè)use關(guān)鍵字。

use語(yǔ)句塊之后必須存在一個(gè)空行。

當(dāng)use引入的類(lèi)出現(xiàn)同名時(shí),可使用as來(lái)定義別名

<?phpnamespace App;use FooBar as BaseBar;class Bar extends BaseBar {}限定符

除了使用use外,還可以直接使用限定符來(lái)進(jìn)行解析,規(guī)則很簡(jiǎn)單:如果含有前綴則代表從全局命名空間開(kāi)始解析,否則則代表從當(dāng)前命名空間開(kāi)始解析。

<?phpnamespace App;FooBarfoo(); // 解析成 FooBarfoo();FooBarfoo(); // 解析成 AppFooBarfoo();此規(guī)則也適用于函數(shù)、常量等$a = strlen(’hi’); // 調(diào)用全局函數(shù) strlen$b = INI_ALL; // 訪問(wèn)全局常量 INI_ALL$c = new Exception(’error’); // 實(shí)例化全局類(lèi) Exception

有兩個(gè)需要特別注意的地方:

對(duì)于函數(shù)和常量而言,如果當(dāng)前命名空間不存在,則會(huì)自動(dòng)去全局命名空間去尋找,因此可省略前綴。對(duì)于類(lèi)而言,如果當(dāng)前命名空間解析不到,不會(huì)去全局空間尋找,因此,不可省略

$a = strlen(’hi’);$b = INI_ALL;$c = new Exception(’error’); // 錯(cuò)誤$c = new Exception(’error’); // 正確

當(dāng)動(dòng)態(tài)調(diào)用命名空間時(shí),該命名空間始終會(huì)被當(dāng)成是全局命名空間,因此可以省略前綴

$class1 = ’FooBar’;$object1 = new $class1; // 始終被解析成 FooBar在內(nèi)部訪問(wèn)命名空間

PHP 支持兩種抽象的訪問(wèn)當(dāng)前命名空間內(nèi)部元素的方法,__NAMESPACE__魔術(shù)常量和namespace關(guān)鍵字。

__NAMESPACE__常量的值是包含當(dāng)前命名空間名稱(chēng)的字符串,如果是在全局命名空間,則返回空字符串。

<?phpnamespace MyProject;function get($classname){ $a = __NAMESPACE__ . ’’ . $classname; return new $a;}

關(guān)鍵字namespace可用來(lái)顯式訪問(wèn)當(dāng)前命名空間或子命名空間中的元素。它等價(jià)于類(lèi)中的self操作符

namespace App;use blahblah as mine;blahmine(); // Appblahmine()namespaceblahmine(); // Appblahmine()namespacefunc(); // Appfunc()namespacesubfunc(); // Appsubfunc()namespacecname::method(); // Appcname::method()$a = new namespacesubcname(); // Appsubcname$b = namespaceCONSTANT; // AppCONSTANT轉(zhuǎn)義符號(hào)

此外,推薦對(duì)所有的進(jìn)行轉(zhuǎn)義,避免出現(xiàn)不可預(yù)期的后果

$class = 'dangerousname'; // n 被解析成換行符$obj = new $class;$class = ’dangerousname’; // 正確,但是不推薦$class = ’dangerousname’; // 推薦$class = 'dangerousname'; // 推薦

以上就是如何理解PHP核心特性命名空間的詳細(xì)內(nèi)容,更多關(guān)于PHP命名空間的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 性大特级毛片视频 | 自偷自偷自亚洲永久 | 麻豆精品传媒成人精品 | 青青操在线免费观看 | 欧美日韩亚洲一区二区三区 | 福利入口在线观看 | 综合免费一区二区三区 | 国内在线观看 | 亚洲欧美色图 | 亚洲高清视频在线播放 | 久久久久亚洲精品中文字幕 | 国产一区二区在线视频观看 | 婷婷影院在线综合免费视频 | 亚洲产在线精品第一站不卡 | 精品在线一区二区三区 | 中日韩黄色大片 | 亚洲婷婷网| 色在线观看视频 | 国产一二在线观看视频网站 | 国产精品v在线播放观看 | 亚洲高清免费在线观看 | 国产一区中文字幕在线观看 | 中文字幕亚洲另类天堂 | 国产一级视频久久 | 玖玖这里只有精品 | 激情毛片视频在线播放 | 夜夜爽天天狠狠九月婷婷 | 久久免费精品国产72精品剧情 | 亚洲国产高清在线 | 国产99在线播放 | 在线观看一级毛片免费 | 日本黄色激情片 | 美女黄页在线观看 | 欧美色图影院 | 免费无毒片在线观看 | 91青青在线视频 | 国产一级特黄aa大片免费 | 精品国产品欧美日产在线 | 一区二三区国产 | 一级做人爰a全过程免费视频 | 中国一级特黄视频 |