遵循PSR-4的自動載入,遵循PSR-4載入_PHP教程

來源:互聯網
上載者:User

遵循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開發規...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.