色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-09-07 10:46:51
目錄提出定義使用限定符在內部訪問命名空間轉義符號提出

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

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

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

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

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

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

使用use關鍵字來引入命名空間

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

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

namespace之后必須存在一個空行; 所有use聲明必須位于namespace聲明之后; 每條use聲明必須只有一個use關鍵字。

use語句塊之后必須存在一個空行。

當use引入的類出現(xiàn)同名時,可使用as來定義別名

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

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

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

有兩個需要特別注意的地方:

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

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

當動態(tài)調用命名空間時,該命名空間始終會被當成是全局命名空間,因此可以省略前綴

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

PHP 支持兩種抽象的訪問當前命名空間內部元素的方法,__NAMESPACE__魔術常量和namespace關鍵字。

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

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

關鍵字namespace可用來顯式訪問當前命名空間或子命名空間中的元素。它等價于類中的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轉義符號

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

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

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

標簽: PHP
相關文章:
主站蜘蛛池模板: 特级毛片全部免费播放a一级 | 欧美一级毛片在线 | 日本三级2021最新理论在线观看 | 国产精品深爱在线 | 在线99| 日本免费在线视频 | 一本色道久久综合亚洲精品加 | 国产欧美一区二区另类精品 | 超薄肉色丝袜精品足j福利 超级乱淫视频aⅴ播放视频 | 免费观看性欧美大片无片 | 亚洲天堂一区二区在线观看 | 三级大片网站 | 欧美毛片性视频区 | 国产亚洲精品成人a在线 | 亚洲精品视频专区 | 亚洲午夜久久久久国产 | japonensis国产福利 | 国产亚洲区| 亚洲在成人网在线看 | 国产精品久久免费视频 | 亚洲欧美成人网 | 波多野结衣一区二区 | 91精品一区国产高清在线 | 91精品久久久久含羞草 | 日本黄色美女网站 | 亚洲精品一区二区三区在线观看 | 国产精品亚洲欧美 | 国产精品久久久精品三级 | 国产精品一区高清在线观看 | 欧美黄网站 | 成人看片黄a毛片 | 国产一进一出视频网站 | 亚洲高清在线观看播放 | 国产国语对白一级毛片 | 全高清特级毛片 | 国产在线精品一区二区夜色 | 亚洲在线视频网站 | 国产精品日韩一区二区三区 | 美女图片131亚洲午夜 | 久久视频精品53在线观看 | 精品国产亚一区二区三区 |