遵循PSR-4的自動載入,遵循PSR-4載入
一、簡介
首先這裡要瞭解PSR,Proposing a Standards Recommendation(提出標準建議)的縮寫,就是一種PHP開發規範,讓我們研發出來的代碼更合理、更好維護、可讀性更高。PSR有下面幾個標準:
- PSR-0:自動載入
- PSR-1:基本代碼規範
- PSR-2:代碼樣式
- PSR-3:日誌介面
- PSR-4:規範自動載入的路徑問題
這裡看出PSR的下標也是從0開始的,和數組還有點像~。其實PSR-4和PSR-0是有點相似甚至冗餘的,他們都說明的是自動載入的規範,只不過PSR-4中的規範更加簡潔,在PSR-0中底線"_"是有特殊含義的,在autoload處理的時候需要將底線轉換為目錄分隔字元,而在PSR-4中底線是沒有任何特殊含義的,所以在檔案自動載入的時候顯得更加簡潔、調理更加清楚。
我對github上面的psr-4規範中的例子進行了大概的翻譯(相信你們的英語水平一定比我好,肯定可以看懂^_^),然後以這個自動載入類庫做了一個小小的例子,例子檔案多、長,放在這裡不太合適,所以我在部落格中就大概介紹下這個例子,想要詳細瞭解的可以去我的github首頁去看這個例子。
二、 自動載入類庫介紹
首先看下自動載入類的大概內容:
class Autoload { // 註冊自動載入函數到spl autoload棧中. public function register(); // 添加一個目錄到一個命名空間首碼中 public function addNamespace($prefix, $base_dir, $prepend=false); // 自動載入函數,會在$this->register中用到 public function loadClass($class); // 尋找映射的檔案 public function loadMappedFile($prefix, $relative_class); //查看一個檔案是否在檔案系統中存在 public function requireFile($file); }
自動載入類庫函數中就這幾個函數,其中register()、addNamespace()、loadMappedFile()、requireFile()函數都比較簡單,一看就懂,唯一一個可能需要解釋下的函數就是loadClass函數,先看下loadClass()函數的代碼:
1 public function loadClass($class) 2 { 3 // 當前的命名空間首碼 4 $prefix = $class; 5 6 //通過命名空間去尋找對應的檔案 7 while (false !== $pos = strrpos($prefix, '\\')) { 8 9 // 可能存在的命名空間首碼10 $prefix = substr($class, 0, $pos + 1);11 12 // 剩餘部分是可能存在的類13 $relative_class = substr($class, $pos + 1);14 15 //試圖載入prefix首碼和relitive class對應的檔案16 $mapped_file = $this->loadMappedFile($prefix, $relative_class);17 if ($mapped_file) {18 return $mapped_file;19 }20 21 // 移動命名空間和relative class分割位置到下一個位置22 $prefix = rtrim($prefix, '\\'); 23 }24 25 // 未找到試圖載入的檔案26 return false;27 }
其實有疑惑的地方可能也只有一個,那就是為什麼這裡要迴圈著去試圖尋找檔案,在while迴圈中,會慢慢的縮短命名空間首碼的名稱去需找合適的命名空間首碼,為什麼要這麼做呢?
迴圈尋找檔案是為了在命名空間中包含更多的內容,不用每次在父命名空間中建立一個檔案夾的時候都去添加一個新的命名空間首碼,就像下面這個圖中描述的那樣:
三、 例子
說道這裡你可能已經對自動載入的內容比較瞭解了,這個時候趁熱打鐵看看我準備的小例子,這裡只是介紹下小例子的目錄結構,由於比較簡單,詳細的內容就不再這裡列了,感興趣的通許可以去我的github首頁看看這個例子
--core
-Autoload.php
--vendor
--test1
-hello.php
--test2
-world.php
-App.php
本文著作權歸作者(luluyrt@163.com)和部落格園共有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文串連,否則保留追究法律責任的權利。
http://www.bkjia.com/PHPjc/936671.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/936671.htmlTechArticle遵循PSR-4的自動載入,遵循PSR-4載入 一、簡介 首先這裡要瞭解PSR,Proposing a Standards Recommendation(提出標準建議)的縮寫,就是一種PHP開發規...