国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

詳解PHP中的命名空間

瀏覽:66日期:2022-09-07 14:22:48

命名空間其實早在PHP5.3就已經出現了。不過大部分同學可能在各種框架的使用中才會接觸到命名空間的內容,當然,現代化的開發也都離不開這些能夠快速產出的框架。這次我們不從框架的角度,僅從簡單的代碼角度來解析一下命名空間的概念和使用。

首先,我們要定義命名空間是個什么東西。

其實就像操作系統的目錄一樣,命名空間就是為了解決類似于操作系統中同一個文件夾不能有相同的文件名一樣的問題。假設我們只有一個文件,一個目錄,那么在這個目錄中,是不能有兩個完全相同的文件的。如果有這樣名稱完全相同的文件,那么操作系統也不知道我們到底應該打開的是哪一個文件。同理,在一個PHP文件中,我們也不能起相同名稱的函數或者類名,PHP也不知道我們到底要調用的是哪一個函數或者類。

理解了上述內容之后,再來看命名空間的語法,其實非常像我們的目錄的定義。

namespace ABC;

這個命名空間的定義就是指出了當前命名空間是ABC。就像是C:ABC這樣一個文件夾一樣。光說不練假把式,直接上代碼來看看:

// file1.phpnamespace FILE1;const CONST_A = 2;function testA(){ echo ’FILE1testA()’, PHP_EOL;}class objectA{ function test(){echo ’FILE1ObjectA’, PHP_EOL; }}

// file2.phpnamespace FILE2;const CONST_A = 3;function testA(){ echo ’FILE2testA()’, PHP_EOL;}class objectA{ function test(){echo ’FILE2ObjectA’, PHP_EOL; }}

我們在namespace目錄下創建了這兩個php文件,函數和類名都是一樣的,但定義了不同的命名空間,一個是FILE1,一個是FILE2。

namespace A;include ’namespace/file1.php’;include ’namespace/file2.php’;use FILE1, FILE2;use FILE1objectA as objectB;const CONST_A = 1;function testA(){ echo ’AtestA()’, PHP_EOL;}class objectA{ function test(){echo ’AObjectA’, PHP_EOL; }}// 當前命名空間echo CONST_A, PHP_EOL; // 1testA(); // AtestA()$oA = new objectA();$oA->test(); // AObjectA// FILE1echo FILE1CONST_A, PHP_EOL; // 2FILE1testA(); // FILE1testA()$oA = new FILE1objectA();$oA->test(); // FILE1ObjectA$oB = new objectB();$oB->test(); // FILE1ObjectA// FILE2echo FILE2CONST_A, PHP_EOL; // 3FILE2testA(); // FILE2testA()$oA = new FILE2objectA();$oA->test(); // FILE2ObjectA

在測試代碼中,我們又定義了當前的命名空間為A。并include了file1.php和file2.php。并在這個文件中同時也定義了與file1.php和file2.php中相同的函數和類名。接下來我們依次調用這些靜態變量、函數和類。

在默認情況下,靜態變量、函數、類調用的是當前命名空間下的內容 在使用了FILE1和FILE2之后,調用的是就是指定命名空間下的內容 需要使用use引入命名空間,否則無法使用命名空間里的內容 use中可以使用as關鍵字為命名空間或者其中的類指定別名

命名空間的使用其實就是這么的簡單。可以看出我們在不同的命名空間中就可以使用相同的函數或者類名了。這一點正是各類現代化開發框架的基礎。同時也是composer能夠實現的最主要的原因之一。

接下來,我們嘗試一個問題是否符合我們的預期,那就是兩個文件定義相同的命名空間是否能夠定義相同的類名呢?

// file1-1.phpnamespace FILE1;const CONST_A = 1.1;function testA(){ echo ’FILE1-1testA()’, PHP_EOL;}class objectA{ function test(){echo ’FILE1-1ObjectA’, PHP_EOL; }}

我們定義了一個file1-1.php,并且使用了和file1.php相同的FILE1命名空間。然后和file1.php一起include到測試代碼中。

include ’namespace/file1.php’;include ’namespace/file1-1.php’; // Cannot redeclare FILE1testA()

好吧,在運行時直接就報錯,不能重復定義同名的函數名。如果注釋掉函數,那么會繼續報類名不能重復。我們再定義一個file1-2.php,這次還是使用FILE1這個命名空間,但是內容不一樣了。

// file1-2.phpnamespace FILE1;const CONST_A = 1.2;function testA1_2(){ echo ’FILE1-2testA()’, PHP_EOL;}class objectA1_2{ function test(){echo ’FILE1-2ObjectA’, PHP_EOL; }}

這樣當然就沒問題啦。這兩個文件在同一個命名空間下,但是卻有著不同的能力,這樣是完全OK的操作。

include ’namespace/file1.php’;include ’namespace/file1-2.php’;use FILE1;// FILE1echo FILE1CONST_A, PHP_EOL; // 2FILE1testA(); // FILE1testA()$oA = new FILE1objectA();$oA->test(); // FILE1ObjectA// FILE1_2echo FILE1CONST_A, PHP_EOL; // 3FILE1testA1_2(); // FILE1-2testA()$oA = new FILE1objectA1_2();$oA->test(); // FILE1-2ObjectA

測試代碼: github.com/zhangyue050…

以上就是詳解PHP中的命名空間的詳細內容,更多關于PHP 命名空間的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
主站蜘蛛池模板: 一级床上爽高清播放 | 欧美成人三级网站在线观看 | 亚洲精品国产第一区二区多人 | 日韩精品中文字幕在线 | 日韩欧美一区二区三区在线 | 久久精品最新免费国产成人 | 日本aaaa片毛片免费 | 国产成人丝袜网站在线看 | 国产精品久久久久影院色 | 国产精品手机在线观看 | 精品视频在线看 | 国产婷婷成人久久av免费高清 | 日韩18在线观看地址 | 国产日韩欧美视频 | 99精品久久秒播无毒不卡 | 久久久久9999 | 成年网在线观看免费观看网址 | 午夜无遮挡怕怕怕免费视频 | 最新更新国内自拍视频 | 99视频网站 | 日日摸日日碰夜夜97 | 精品国产亚洲一区二区在线3d | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片99 | 中文字幕中文字幕中中文 | 精品无码久久久久久国产 | 亚洲欧美一区二区三区 | 天堂mv亚洲mv在线播放9蜜 | 91亚洲综合 | 国产精品99久久免费观看 | 免费人成年短视频在线观看免费网站 | 高清国产美女一级a毛片录 高清国产亚洲va精品 | 成人国产三级在线播放 | 国产成人精品在线 | 午夜在线伦理福利视频 | 国产欧美日韩在线观看精品 | 久草新在线观看 | 91精品国产高清91久久久久久 | 国产色司机在线视频免费观看 | 欧美成人h精品网站 | 亚洲图片 自拍偷拍 | 亚洲国产精品久久网午夜 |