PHP中命名空間 namespace 的使用方法

2021-08-17 12:31:40 字數 2288 閱讀 2366

php中的命名空間一是為了解決類名、函式名、常量名的衝突問題;二是為了很長的識別符號名稱建立乙個別名,提高**的可讀性。

下面介紹幾種命名空間的使用方法,首先展示一下我的檔案目錄結構以及a.php 和 b.php **

}第一種使用方法:

c.php

<?php 

header("content-type:text/html;charset=utf-8");

include_once "./modela/a.php";

include_once "./modelb/a.php";

use modela\a;

use modelb\a as b;

a::out();

echo "

";$b = new b();

$b->out();

在這種方法中,需要使用iniclude_once()方法引入檔案,也需要使用命名空間。可能有些人會認為:不是已經使用use modela\a了嗎,那就應該把檔案引入進來了,為什麼還要include_once()一下呢?那是因為use modela\a僅僅是宣告要使用modela命名空間下的a檔案,可以理解為邏輯上的使用,為了防止重名。而include_once()則是物理上的使用,將**匯入到c.php中。use 和 include缺一不可。

可是在一些框架中,要使用另乙個類檔案時,我們只需要use modela\a就可以了,不再需要include檔案了,這是因為這些框架中一般都封裝了自動載入機制,一般使用魔術方法__autoload()或spl_autoload_register()方法。

__autoload()方法在什麼時候觸發呢,當**中使用new關鍵字例項化乙個物件時,如果該類沒有在當前php檔案中被定義,將會觸發__autoload函式,此時,就可以引進定義該類的php檔案,這樣就能成功例項化乙個類了。另外,如果需要include 100個php檔案,那麼**將會非常冗雜,檔案也會非常龐大,而使用該方法則會根據命名空間動態載入類,很好的解決引入檔案過多的問題。

__autoload()使用方法:

<?php 

header("content-type:text/html;charset=utf-8");

use modela\a;

use modelb\a as b;

function __autoload($classname).php";

if(file_exists($classpath))

include_once($classpath);

else

echo $classpath . "not found";

}a::out();

echo "

";$b = new b();

$b->out();

其實__spl_autoload_register()方法的使用和__autoload()的使用幾乎一樣,只是前者可以自定義函式替代__autoload(),使用如下:

<?php 

header("content-type:text/html;charset=utf-8");

use modela\a;

use modelb\a as b;

function diy($classname).php";

if(file_exists($classpath))

include_once($classpath);

else

echo $classpath . "not found";

}spl_autoload_register("diy");

a::out();

echo "

";$b = new b();

$b->out();

php中命名空間詳解

一 定義命名空間 命名空間主要針對 類,函式和常量,因為他們的作用域是全域性的,產生命名衝突的可能性很大 1.關鍵字 namespace 作用 1.定義命名空間 2.顯示的訪問當前命名空間,類似於self 2.常量 namespace 當前命名空間字串,全域性為空字元 3.宣告空間前不宜有除了dec...

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...