麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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關鍵字是用來聲明命名空間的。現在運行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的命名空間 的詳細內容,更多請關注 其它相關文章!

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩视频一区在线 | 91av在线国产| 免费网址黄 | 爽爽淫人网 | 国产午夜亚洲精品理论片大丰影院 | 免费国产视频大全入口 | 黄色毛片一级 | 色天天综合网 | 91成人一区| 免费一级电影 | 午夜视频在线观看免费视频 | 九九热视频这里只有精品 | wankz100%videos | 久久久久成人免费 | 国产美女的小嫩bbb图片 | 色99999| 羞羞视频免费网站 | 国产免费一区二区三区网站免费 | 蜜桃视频最新网址 | av噜噜在线 | 精品久久一区二区三区 | 国产69精品久久99不卡免费版 | 女人久久久www免费人成看片 | 国产精品久久久久网站 | 欧美精品一区二区三区在线播放 | 黄色影院 | 精品呦女 | 国产精品爱久久久久久久 | 免费a观看 | 日本高清在线免费 | 国产一级桃视频播放 | 久久精品一区二区三区不卡牛牛 | 羞羞的视频在线免费观看 | 久久毛片 | 久久久久久久一区二区 | 久久亚洲线观看视频 | 亚洲电影在线观看高清免费 | 国产毛毛片一区二区三区四区 | 亚洲91精品 | 黄色影院av | 成人在线视频免费观看 |