之前沒有系統學習過PHP語言,直接上手TP框架了,所以認為namespace和use是TP框架的一部分,最近學習語言模塊的時候遇到了這個問題,所以匯總了一下,
PHP中命名空間可以解決兩類問題:
- 用戶撰寫的代碼與
PHP內部的類、函式、常量或第三方類、函式、常量之間的名字沖突, - 為很長的識別符號名稱(通常是為了緩解第一類問題而定義的)創建一個別名,提高代碼的可讀性,
在沒定義命名空間的情況下,所有的常量、類、函式等都在全域空間下,
命名空間
通過關鍵字namespace宣告,可以在同一個檔案中定義不同的命名空間代碼,全域的非命名空間代碼與命名空間中的代碼通過大括號的形式可以組合在一起
<?php
# 命名空間TestA
namespace TestA{
class TestA{}
function test(){}
}
# 命名空間TestB
namespace TestB{
class TestB{}
function test(){}
}
# 全域的非命名空間
namespace{
class TestC{}
function test(){}
}
子命名空間
與目錄和檔案的關系很像,PHP命名空間也允許指定層次的命名空間的名稱
<?php
namespace a\b\Test;
?>
命名空間的引入
通過關鍵字use引入,通過as定義別名
引入命名空間三種情況:
非限定名稱,或不包含前綴的類名稱,在命名空間為a下,使用$a = new foo();代表參考的是a\foo,在命名空間為全域的情況下,使用該方法則參考的是foo,
限定名稱,或包含前綴的名稱,在命名空間為a下,使用$a = new b\foo();代碼引入的是a\b\foo,在命名為全域的情況下,使用該方法引入的是b\foo,
完全限定名稱,或包含了全域前綴運算子的名稱,在命名空間為a下,$a = new \c\b\foo();這種情況下,總是引入為c\b\foor檔案
上述三種方式其實就是檔案路徑中絕對路徑和相對路徑,
注意:訪問任意全域類、函式或變數,都可以使用完全限定名稱,例如\strlen()或者\Exception,
<?php
namespace foo;
use \A\B\TestA; #匯入命名空間
use \A\B\TestB as TB; #匯入命名空間,并別名為TB
?>
namespace和__NAMESPACE__魔術常量
namespace用于定義命名空間,__NAMESPACE__是包含當前命名空間的字串,在全域的情況下,它是一個空字串'',
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67424.html
標籤:PHP
上一篇:php會話控制
下一篇:php操作mysql
