php命名空間

2022-08-03 05:18:13 字數 2649 閱讀 1940

說明:在同乙個檔案中,如果引入兩個檔案,而這兩個檔案都有乙個相同名字的類的時候,我們在例項化這兩個類的時候,需要加上這兩個檔案的名字及其位置(例:new home/indexcontroller/a()),而命名空間的作用就是來減少這種墜餘操作的

本文章引用於:

說一大套廢話不如舉個例子來說,請看:

假設 有檔案a.php **

1

<?php

2class a7}

8 ?>

有檔案b.php **

<?php

class a

}?>

有檔案c.php 現在有如下需求 

需求1:需要在c.php中呼叫afun()。

需求1很簡單 大家都懂 把a.php檔案引入進來然後例項化a物件就行,require_once('a.php');

需求2:在c.php中呼叫bfun()

與上面一樣 require_once('b.php')就行。

需求3:在c.php中同時呼叫afun()與bfun()

問題來了,如果同時require檔案a,php,b.php那麼例項化物件時class a到底是a.php中的還是b.php的?(哪些鑽牛角尖說你不會把b.php中的class a換成其他名字 請繞道!);於是為了方便管理類引入了命名空間namespace。

好下面 我們修改檔案a.php b.php **加入命名空間!

a.php:

<?php

namespace ns\a;

//定義命名空間

class a

}?>

b.php:

<?php

namespace ns\b;

//定義命名空間

class a

}?>

於是在c.php中我們就可以引用上面定義命名空間 怎麼引用?這是關鍵字use就出來了!

c.php:在c.php同時呼叫afun,bfun

<?php

require_once('a.php');//

引入檔案a.php

require_once('\b.php');//

引入檔案a.php

use ns\a\a as a; //

使用命名空間ns\a中的類a 並用a替換

use ns\b\a as b;//

使用命名空間ns\b中的類a 並用b替換

$a=new a();//

例項化a.php 中的類a

$a->afun();

$a=new b();//

例化b.php 中的類a

$a->bfun();

上面的例子應該足以說明namespace 、 use的關係

下面總結下:

可以這樣理解 namespace 命名空間是為了方便管理類而引入的機制,我們可以將功能相近的類都放在同一命名空間下,在使用時直接引入該空間就可以了,簡單的說namespace 就是將裡面的類打個包。比如下面**:

namespace  my\test;

classa}

class

c}

我們通過命名空間就可以把類a與類c歸集在一起。當然類a與類c可以在不同的檔案中定義只要它們的命名空間相同 它們就會歸集在一起。這樣的機制下我們會發現以後類的組織會很清晰!我們把類通過namespace "打包"後 在使用時 只要通過use引入該「包」即可呼叫該類!如果我們專案的檔案很多、類成千上萬 那麼對類的管理至關重要,這也是為什麼很多php框架都用命名空間的原因,當然了你自己寫小專案玩玩就不需要用了!

注意

關鍵字namespace後面跟的是名稱 不是路徑!我們看到很多框架namespace後面都跟著「路徑」其實是為了讓我們知道該命名空間所在的檔案位置 當我們檔案很多時,這樣的名稱會方便我們查詢。

關鍵字use使用時後面一般跟類名 比如:

use a\b //表示使用命名空間下的類b 

use a\b as c //表示使用命名空間下的類b 並額外賦予額外標示c 即可以把c但類b使用

其實use 可以不使用!如在上面的例子檔案a.php中我們使用class a;

use ns\a as a;

$a=new a();

等同於:

$a=new ns\a\a();

還有namespace  use與require_once(include類似)作用完全不同!很多人以為use就是把檔案包含進來 這是錯誤的觀點!甚至還有人認為有use就不需要require了,這樣的觀點只能說明根本不了解命名空間的用途!試想一下我們要使用use如果連命名空間在**都不知道,那麼怎麼使用類?所以如果命名空間在其他檔案中必須使用require(include)先將檔案包含進來!

php 命名空間,PHP使用命名空間

介紹 命名空間中的類,函式或常量可以通過以下方式使用 在當前命名空間中使用類 指定相對於當前命名空間的命名空間 提供命名空間的全限定名稱 從當前命名空間 在此示例中,從test1.php載入了命名空間。沒有命名空間引用的函式或類名稱將訪問當前命名空間中的功能或類名稱 示例 test1.php nam...

php命名空間

namespace misszhou function var dump a 1 var dump var dump 1 表示呼叫全域性 解決常量的衝突問題 有點像子目錄的概念 namespace meizi 必須放第一行 include func.inc.php function one func...

php 命名空間

使用命名空間 別名 匯入,允許通過別名引用或匯入外部的完全限定名稱,是命名空間的乙個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號連線。所有支援命名空間的php版本支援三種別名或匯入方式 為類名稱使用別名 為介面使用別名或為命名空間名稱使用別名。php 5.6開始允...