2016年10月6日 星期四

composer在手,進入php元件化開發的世界(基本版)

        前言:這裡不介紹如何安裝composer,namespace的定義,psr的解釋,僅介紹如何實踐自動載入和元件化開發的基本了解。


        以前開發php專案的時候,都需要在同一個頁面上include或require好幾支class進來





        頁面非常凌亂,每個class路徑也不一樣,在開發的時候容易增加不必要的小錯誤,得多花時間來debug。

        composer的自動載入機制在這點完美解決了目前的問題,只需要在專案的根目錄裡增加一個「 composer.json 」 檔案就行了!


接著在裡面加上自動載入的psr-4規則

{
    "autoload": {
        "psr-4": {
            "DB\\": "DB/",
            "Tool\\": "Tools/"
        }
    }
}

         DB/、Tools/,分別是你專案裡從根目錄算下來的資料夾名稱,假設你的專案叫做BookStore,這兩個資料夾分別會在BookStore/DB、BookStore/Tools,而前面紅色字體部分則是它在這個專案裡面定義的名稱空間(namespace),紅色的部分要取什麼名字都可以。

        接著在根目錄執行:composer install

        會看到專案裡面多了一個vendor的資料夾。


         composer幫你把所有東西都搞定了,所以不用再自己動手實際刻一個autoload出來。



         接著在每一個要引入的class表頭加上namespace,例如HashMap在:
   

        將HashMap.php的標頭加上namespace Tool,也就是我們在composer.json裡的紅色字體


        值得一提的是,namespace其實要取什麼都可以,並不一定要跟composer.json裡設定的一樣,只要use的時候,注意來源就好,不過同一個資料夾命名統一的話也會比較好管理。

         現在要用別支程式碼只需要require一次composer幫我們產生的autoload.php檔案,接著在要引入的地方使用use,接著就不用去管路徑在哪,只要該程式碼有設定namespace就行了

        接著,把剛剛那一大堆的include程式碼轉換一下


      
        程式碼其他實作的部分完全不用調整,引入的部分則是被梳理的不錯。



        另外,之前php引用第三方元件的時候,都是整包下載下來之後,再把整個資料夾丟到目前的專案裡,這部分composer也幫你搞定了:
  1. https://packagist.org/     尋找須引入的第三方元件
  2. 假設是phpmailer




       3. 複製指令列(標題正下方)到專案的根目錄裡執行:

composer require phpmailer/phpmailer

       4. 大功告成!

      使用方式跟上面提及的方式一樣:


     


沒有留言:

張貼留言