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

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

詳解PHP中的命名空間

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

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

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

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

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

namespace ABC;

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

// 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目錄下創(chuàng)建了這兩個(gè)php文件,函數(shù)和類名都是一樣的,但定義了不同的命名空間,一個(gè)是FILE1,一個(gè)是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; }}// 當(dāng)前命名空間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

在測試代碼中,我們又定義了當(dāng)前的命名空間為A。并include了file1.php和file2.php。并在這個(gè)文件中同時(shí)也定義了與file1.php和file2.php中相同的函數(shù)和類名。接下來我們依次調(diào)用這些靜態(tài)變量、函數(shù)和類。

在默認(rèn)情況下,靜態(tài)變量、函數(shù)、類調(diào)用的是當(dāng)前命名空間下的內(nèi)容 在使用了FILE1和FILE2之后,調(diào)用的是就是指定命名空間下的內(nèi)容 需要使用use引入命名空間,否則無法使用命名空間里的內(nèi)容 use中可以使用as關(guān)鍵字為命名空間或者其中的類指定別名

命名空間的使用其實(shí)就是這么的簡單。可以看出我們在不同的命名空間中就可以使用相同的函數(shù)或者類名了。這一點(diǎn)正是各類現(xiàn)代化開發(fā)框架的基礎(chǔ)。同時(shí)也是composer能夠?qū)崿F(xiàn)的最主要的原因之一。

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

// 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; }}

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

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

好吧,在運(yùn)行時(shí)直接就報(bào)錯(cuò),不能重復(fù)定義同名的函數(shù)名。如果注釋掉函數(shù),那么會繼續(xù)報(bào)類名不能重復(fù)。我們再定義一個(gè)file1-2.php,這次還是使用FILE1這個(gè)命名空間,但是內(nèi)容不一樣了。

// 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; }}

這樣當(dāng)然就沒問題啦。這兩個(gè)文件在同一個(gè)命名空間下,但是卻有著不同的能力,這樣是完全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中的命名空間的詳細(xì)內(nèi)容,更多關(guān)于PHP 命名空間的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 国产欧美精品一区二区三区-老狼 | 国产精品自在欧美一区 | 国产美腿丝袜福利视频在线观看 | 黄色片视频在线免费观看 | 久久性视频 | 一级香蕉视频在线观看 | 毛片毛片毛片毛片毛片毛片 | yy6080久久国产伦理 | 国产精品黄在线观看观看 | 4388x17亚洲最大成人网 | 久草在线视频免费资源观看 | 国产在线播放一区二区 | 日韩99精品| 国产精品99久久免费黑人 | 亚洲瑟 | 亚洲视频在线不卡 | a级国产视频 | 国产一区二区三区四 | 亚洲综合激情五月色播 | 欧美噜噜噜 | 欧美亚洲人成网站在线观看刚交 | 日本最黄视频 | 久久国产免费一区二区三区 | 成人性a激情免费视频 | 免费又黄又粗又爽大片 | 国产在线每日更新 | 人人做天天爱夜夜爽中字 | 91精品国产免费久久久久久 | 女人被男人狂躁下面在线观看 | 国产成人麻豆tv在线观看 | 国产在线a不卡免费视频 | 亚洲视频在线观看网址 | 99久久这里只精品国产免费 | 37pao成人国产永久免费视频 | 91大神精品长腿在线观看网站 | 99久久精品毛片免费播放 | 亚洲高清国产一线久久 | 一级黄色片黄色片 | 久久久这里有精品 | 久在线 | 中国一级做a爱片免费 |