PHP名稱空間及自動載入淺析
名稱空間
什麼是名稱空間呢?
名稱空間(英語:Namespace)表示識別符號(identifier)的可見範圍。一個識別符號可在多個名稱空間中定義,它在不同名稱空間中的含義是互不相干的。這樣,在一個新的名稱空間中可定義任何識別符號,它們不會與任何已有的識別符號發生衝突,因為已有的定義都處於其它名稱空間中。
簡單說來名稱空間是為了解決不同庫在同一個環境下使用時出現的命名衝突。例如我自己有一個函式名叫A,但是系統已經有一個A函式了,那就會出現衝突。
PHP中的名稱空間
PHP從5.3版本開始引入了名稱空間,之後許多現有PHP類庫以及框架都開始支援它。那麼PHP的名稱空間怎麼用呢?
定義名稱空間
下面是一個定義名稱空間的例子
<?php //file a.php namespace A; const test = 'Atest'; function test() { return __FUNCTION__; } class Test{ public function __construct(){ return __METHOD__; } } ?>
上面例子中就是一個典型的名稱空間定義方法,只有const
, function
,class
受名稱空間的約束。
使用名稱空間
使用名稱空間的方式如下:
<?php namespace B; use A; const test = 'Btest'; function test() { return __FUNCTION__; } class Test{ public function __construct(){ return __METHOD__; } } include "a.php";//必須包含A名稱空間的檔案 // 完全限定 // `\B\test`從絕對位置查詢輸出,如果是全域性函式則`\test` echo \B\test; //輸出Btest // 限定名稱 // 這裡已經通過`use A`申明瞭在這個檔案可以通過`\A\...`使用A名稱空間的函式 echo A\test; //輸出Atest // 非限定名稱 // 非限定名稱的函式`test`會從當前命名控制元件查詢,即B echo test; //輸出Btest // namespace關鍵字代表當前名稱空間 echo namespace/test; ?>
首先要注意的是名稱空間只起申明作用,也就是在使用了名稱空間的時候依然得把這個名稱空間申明的那個檔案包含進來。在使用中可以通過__NAMESPACE__
來檢視當前名稱空間。
更多內容可以檢視PHP官方文件
自動載入
每個檔案既要申明命名控制元件又要手動include
是非常不智慧的事情,所以在自己的PHP系統或者框架中可以使用自動載入技術,讓系統自己去找
最簡單的方式是利用函式__autoload
函式,但是這個函式只能在非命名控制元件下定義,也就是全域性情況下:
function __autoload($class) { $dir = './'; set_include_path(get_include_path().PATH_SEPARATOR.$ids_dir); $class = str_replace('\\', '/', $class) . '.php'; require_once($class); }
如果在已經有了名稱空間的類中,可以使用函式spl_autoload_register
來註冊一個類中的方法來代替__autoload
相關文章
- PHP名稱空間與自動載入簡述PHP
- PHP名稱空間與PSR-4自動載入PHP
- swift中的名稱空間及動態載入類Swift
- PHP物件導向深入研究之【名稱空間】與【自動載入類】PHP物件
- PHP 名稱空間PHP
- PHP名稱空間PHP
- PHP框架中的檔案載入的實現(自動載入/PSR規範/名稱空間)PHP框架
- 自研 PHP 框架 1.1_名稱空間PHP框架
- JAXB名稱空間及名稱空間字首處理
- PHP 核心特性 - 名稱空間PHP
- PHP名稱空間概念解析PHP
- 一篇弄懂PHP名稱空間及use的使用PHP
- PHP 物件導向 (三)名稱空間PHP物件
- php名稱空間的呼叫順序PHP
- 【 PHP 學習筆記 】名稱空間PHP筆記
- [ PHP 學習筆記 ] 名稱空間PHP筆記
- php名稱空間namespace使用筆記PHPnamespace筆記
- 對於PHP中名稱空間概念的入門理解PHP
- 名稱空間
- PHP 獲取不帶名稱空間的類名PHP
- PHP名稱空間(Namespace)的使用詳解PHPnamespace
- Kubernetes 名稱空間入門
- vuex名稱空間Vue
- jQuery 名稱空間jQuery
- JavaScript 名稱空間JavaScript
- python名稱空間Python
- C++名稱空間C++
- 更改模型名稱空間模型
- 全域性名稱空間
- C++ 名稱空間C++
- Python 名稱空間Python
- ts---名稱空間
- 11. 名稱空間
- 使用p名稱空間和c名稱空間的XML快捷方式XML
- Spring名稱空間解析Spring
- 使用名稱空間:基礎
- ros節點名稱空間ROS
- JavaScript 中的名稱空間JavaScript