亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于PHP的命名空間

2020-03-24 18:12:47
字體:
來源:轉載
供稿:網友
這篇文章介紹的內容是關于PHP的命名空間 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

什么是PHP命名空間

PHP手冊:從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。

命名空間的作用

1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。

示例

寫這個命名空間的文章是因為一個朋友剛學這個來問我命名空間到底是個什么東西。我在想怎么簡單的描述出來并且很容易理解。下面我就以幾個簡單的小例子來說明一下我自己對命名空間的理解。

1. 例一
首先我們先建立兩個類文件
a.php

html' target='_blank'>class Test{    public function test()    {        echo "this is A class.";    }}

b.php

class Test{    public function test()    {        echo "this is B class.";    }}

再建立一個index.php文件,來引入以上兩個類并調用其中的方法。
index.php

require_once("a.php");require_once("b.php");

現在運行index.php文件,你會發現有一個致命錯誤: Fatal error: Cannot redeclare class Test in。。。很顯然,無法重新聲明Test類,因為你引入了兩次,而且兩個文件中的類名稱相同,沖突了。這個時候就需要命名空間來解決這個問題,并且很容易。
2. 例二
我們現在把兩個類文件稍作修改。
a.php

namespace a/test;class Test{    public function test()    {        echo "this is A class.";    }}

b.php

namespace b/test;class Test{    public function test()    {        echo "this is B class.";    }}

namespace關鍵字是用來聲明命名空間的?,F在運行index.php發現沒有錯誤,修改index.php進行方法調用測試
index.php

require_once("a.php");require_once("b.php");$a = new a/test/Test();$a->test();//頁面輸出:this is A class.

3. 例三
現在有另外一種情況,比如我需要實例化a.php中的Test類多次,那么每次我們都需要命名空間信息完整寫的話比較麻煩怎么辦呢?比如:
index.php

require_once("a.php");require_once("b.php");$a = new a/test/Test();$a_a = new a/test/Test();$a_b = new a/test/Test();$a->test();$a_a->test();//頁面輸出:this is A class.this is A class.

雖然也沒有錯誤,但是你會發現比較麻煩,每次都需要全寫命名空間名稱,雖然不報錯并且可以ctrl+c,ctrl+v,但是不太美觀(^_^)。
你可以這樣做:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;$a = new Test();$a_a = new Test();$a_b = new Test();$a->test();$a_a->test();//頁面輸出:this is A class.this is A class.

use關鍵字是用來引入類,用命名空間的方式表示使用了某個類。后面就可以直接實例化操作
4. 例五
接下來另一個問題又來了,如下:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;use b/test/Test;$a = new Test();$b = new Test();$a->test();$b->test();

很明顯,又一個致命錯誤:Fatal error: Cannot use b/test/Test as Test because the name is already in use in 。。。因為雖然使用了命名空間,但是兩個類名稱相同,都是Test,程序不知道第二個Test類是b.php中的Test類,這時候你就用到了as關鍵字
如:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;use b/test/Test as BTest;$a = new Test();$b = new BTest();$a->test();$b->test();//頁面輸出:this is A class.this is B class.完美解決

as關鍵字是對類名稱定義別名,可以有效防止類名稱相同沖突
5. 例六
下面是另一種情況,我先給出幾個代碼片段,是Yii2框架中的,和框架無關,只是為了演示使用,很多地方都能見到此例。

if (/Yii::$app->request->isPost) {            $post = /Yii::$app->request->post();           ...        }

很顯然這里使用了一個Yii類,但是為什么前面又一個反斜杠”/”,我們先追蹤一下Yii類,有的同學會問怎么追蹤呢,如果你使用的是PHPstorm編輯器,直接按住Ctrl,鼠標點擊類名就會跳到此類類文件中,關于怎么使用PHPstorm編輯器,請查看:PhpStorm破解版及使用教程
下面是Yii類文件代碼段:

/** * Yii bootstrap file. * * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */require(__DIR__ . '/BaseYii.php');class Yii extends /yii/BaseYii{}

你會發現該Yii類并沒有命名空間,我們將這種類叫做全局類,如果要使用需要類前面加入反斜杠”/”
比如我們在a.php同級再建立一個全局類文件:c.php:

class Test{    public function test()    {        echo "this is C class.";    }}

在index.php文件中這樣做即可調用c.php中的test方法

require_once("a.php");require_once("b.php");require_once("c.php");use a/test/Test;use b/test/Test as BTest;$a = new Test();$b = new BTest();$c = new /Test();$a->test();$b->test();$c->test();//頁面輸出:this is C class.this is A class.this is B class.this is C class.

注意:namespace,use,as等關鍵字用法以及全局類的使用。

什么是PHP命名空間

PHP手冊:從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。

命名空間的作用

1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名(或簡短)的名稱,提高源代碼的可讀性。

示例

寫這個命名空間的文章是因為一個朋友剛學這個來問我命名空間到底是個什么東西。我在想怎么簡單的描述出來并且很容易理解。下面我就以幾個簡單的小例子來說明一下我自己對命名空間的理解。

1. 例一
首先我們先建立兩個類文件
a.php

class Test{    public function test()    {        echo "this is A class.";    }}

b.php

class Test{    public function test()    {        echo "this is B class.";    }}

再建立一個index.php文件,來引入以上兩個類并調用其中的方法。
index.php

require_once("a.php");require_once("b.php");

現在運行index.php文件,你會發現有一個致命錯誤: Fatal error: Cannot redeclare class Test in。。。很顯然,無法重新聲明Test類,因為你引入了兩次,而且兩個文件中的類名稱相同,沖突了。這個時候就需要命名空間來解決這個問題,并且很容易。
2. 例二
我們現在把兩個類文件稍作修改。
a.php

namespace a/test;class Test{    public function test()    {        echo "this is A class.";    }}

b.php

namespace b/test;class Test{    public function test()    {        echo "this is B class.";    }}

namespace關鍵字是用來聲明命名空間的。現在運行index.php發現沒有錯誤,修改index.php進行方法調用測試
index.php

require_once("a.php");require_once("b.php");$a = new a/test/Test();$a->test();//頁面輸出:this is A class.

3. 例三
現在有另外一種情況,比如我需要實例化a.php中的Test類多次,那么每次我們都需要命名空間信息完整寫的話比較麻煩怎么辦呢?比如:
index.php

require_once("a.php");require_once("b.php");$a = new a/test/Test();$a_a = new a/test/Test();$a_b = new a/test/Test();$a->test();$a_a->test();//頁面輸出:this is A class.this is A class.

雖然也沒有錯誤,但是你會發現比較麻煩,每次都需要全寫命名空間名稱,雖然不報錯并且可以ctrl+c,ctrl+v,但是不太美觀(^_^)。
你可以這樣做:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;$a = new Test();$a_a = new Test();$a_b = new Test();$a->test();$a_a->test();//頁面輸出:this is A class.this is A class.

use關鍵字是用來引入類,用命名空間的方式表示使用了某個類。后面就可以直接實例化操作
4. 例五
接下來另一個問題又來了,如下:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;use b/test/Test;$a = new Test();$b = new Test();$a->test();$b->test();

很明顯,又一個致命錯誤:Fatal error: Cannot use b/test/Test as Test because the name is already in use in 。。。因為雖然使用了命名空間,但是兩個類名稱相同,都是Test,程序不知道第二個Test類是b.php中的Test類,這時候你就用到了as關鍵字
如:
index.php

require_once("a.php");require_once("b.php");use a/test/Test;use b/test/Test as BTest;$a = new Test();$b = new BTest();$a->test();$b->test();//頁面輸出:this is A class.this is B class.完美解決

as關鍵字是對類名稱定義別名,可以有效防止類名稱相同沖突
5. 例六
下面是另一種情況,我先給出幾個代碼片段,是Yii2框架中的,和框架無關,只是為了演示使用,很多地方都能見到此例。

if (/Yii::$app->request->isPost) {            $post = /Yii::$app->request->post();           ...        }

很顯然這里使用了一個Yii類,但是為什么前面又一個反斜杠”/”,我們先追蹤一下Yii類,有的同學會問怎么追蹤呢,如果你使用的是PHPstorm編輯器,直接按住Ctrl,鼠標點擊類名就會跳到此類類文件中,關于怎么使用PHPstorm編輯器,請查看:PhpStorm破解版及使用教程
下面是Yii類文件代碼段:

/** * Yii bootstrap file. * * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */require(__DIR__ . '/BaseYii.php');class Yii extends /yii/BaseYii{}

你會發現該Yii類并沒有命名空間,我們將這種類叫做全局類,如果要使用需要類前面加入反斜杠”/”
比如我們在a.php同級再建立一個全局類文件:c.php:

class Test{    public function test()    {        echo "this is C class.";    }}

在index.php文件中這樣做即可調用c.php中的test方法

require_once("a.php");require_once("b.php");require_once("c.php");use a/test/Test;use b/test/Test as BTest;$a = new Test();$b = new BTest();$c = new /Test();$a->test();$b->test();$c->test();//頁面輸出:this is C class.this is A class.this is B class.this is C class.

注意:namespace,use,as等關鍵字用法以及全局類的使用。

以上就是關于PHP的命名空間 的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区免费网站| 日韩电影免费观看在线观看| 日韩亚洲欧美中文高清在线| 午夜剧场成人观在线视频免费观看| 日本高清视频一区| 97久久国产精品| 亚洲精品成人久久电影| 成人免费网站在线看| 亚洲国产毛片完整版| 国产精品一区二区3区| 亚洲精品不卡在线| 红桃视频成人在线观看| 日韩视频欧美视频| 中文国产成人精品久久一| 国产精品白丝av嫩草影院| 国产成人在线一区| 欧美成人午夜激情在线| 精品久久久久久久久中文字幕| 久久久国产精彩视频美女艺术照福利| 日本韩国在线不卡| 欧美成人精品一区| 中文字幕欧美国内| 激情久久av一区av二区av三区| 欧美精品免费看| 精品久久久久久中文字幕| 亚洲精品电影网| 国产视频精品自拍| 亚洲成人激情图| 欧美激情一区二区三级高清视频| 精品美女永久免费视频| 亚洲高清免费观看高清完整版| 国产精品久久久久久久午夜| 高清一区二区三区日本久| 黄色成人在线播放| 欧美大人香蕉在线| 久久久999精品免费| 国产午夜精品一区二区三区| 亚洲第一综合天堂另类专| 国内免费久久久久久久久久久| 亚洲精品永久免费精品| 欧美性xxxxx极品娇小| 国语自产精品视频在线看一大j8| 国产精品视频资源| 精品爽片免费看久久| 久久不射热爱视频精品| 亚洲伊人久久大香线蕉av| 久久久亚洲国产天美传媒修理工| 久久精品国产精品| 色综合男人天堂| 亚洲自拍偷拍色图| 国产69精品久久久久久| 26uuu另类亚洲欧美日本老年| 日韩在线中文字幕| 97久久精品视频| 中文字幕精品—区二区| 欧美日韩一二三四五区| 亚洲欧美一区二区三区四区| 亚洲午夜激情免费视频| 亚洲一区制服诱惑| 国产福利精品av综合导导航| 亚洲欧美精品suv| 色妞在线综合亚洲欧美| 亚洲天堂一区二区三区| 性欧美在线看片a免费观看| 国产乱肥老妇国产一区二| 国产精品久久久久久久久久ktv| 日韩精品中文字| 欧美激情综合亚洲一二区| 久久久91精品国产一区不卡| 亚洲精品一区二区网址| 中文字幕亚洲国产| 啊v视频在线一区二区三区| 91精品国产亚洲| 日韩精品亚洲精品| 97免费视频在线| 精品久久中文字幕| 欧美日韩在线另类| 一区二区三区国产在线观看| 永久免费毛片在线播放不卡| 久久久久久久久电影| 国产精品午夜视频| 亚洲激情第一页| 亚洲国产欧美自拍| 国产精品美女www爽爽爽视频| 久久精品色欧美aⅴ一区二区| 91视频国产精品| 欧美成年人网站| 久久成人亚洲精品| 亚洲视频在线免费观看| 亚洲国产高潮在线观看| 欧美日韩在线观看视频小说| 亲子乱一区二区三区电影| 性欧美亚洲xxxx乳在线观看| 97超级碰碰碰久久久| 少妇av一区二区三区| 一区二区亚洲精品国产| 亚洲国产一区二区三区四区| 欧美亚洲国产日韩2020| 55夜色66夜色国产精品视频| 亚洲欧美精品一区二区| 亚洲美女在线看| 91精品久久久久久久久久久久久| 精品视频久久久久久久| 欧美激情视频一区二区| 亚洲精品色婷婷福利天堂| 欧美高清videos高潮hd| 精品国产福利在线| 国产一区二区三区免费视频| 日韩美女免费视频| 欧美三级免费观看| 亚洲精品视频免费在线观看| 国产精品久久一区| 91网站免费看| 久久精品视频在线观看| 狠狠久久亚洲欧美专区| 国产精品久久77777| 亚洲xxxx18| 亚洲色在线视频| 欧美激情奇米色| 国产欧美在线播放| www.国产一区| 国产美女精品视频免费观看| 日韩欧美在线免费| 亚洲国产成人精品女人久久久| 深夜福利日韩在线看| 亚洲精品久久久久久久久久久久久| 伊人伊成久久人综合网小说| 91av视频在线| 国产精品va在线| 一区二区在线免费视频| 久久久日本电影| 欧美日韩在线视频首页| 欧美精品videos性欧美| 欧美日韩亚洲天堂| 日韩在线不卡视频| 91精品久久久久久久| 日韩中文字幕在线观看| 这里只有精品视频| 91精品久久久久久久久中文字幕| 成人免费网站在线观看| 国产精品自拍网| 亚洲最新av网址| 欧美最猛性xxxx| 97视频国产在线| 一区二区国产精品视频| 91精品国产乱码久久久久久蜜臀| 成人精品一区二区三区| 欧美电影院免费观看| 日韩电视剧在线观看免费网站| 懂色av影视一区二区三区| 日韩成人免费视频| 亚洲aⅴ男人的天堂在线观看| 国产欧美最新羞羞视频在线观看| 庆余年2免费日韩剧观看大牛| 久久伊人免费视频| 欧美激情亚洲一区| 亚洲第一区在线观看| 久久精品国产91精品亚洲| 国产91露脸中文字幕在线| 欧美二区在线播放| 日韩精品在线影院| 欧美激情视频在线| 国产91精品不卡视频| 亚洲综合在线小说|