composer autoload example

學習composer做了一個測試,實驗使用composer 做外部套件與內部套件的整合管理

1.目錄與檔案

/var/www/html/index.php

/var/www/html/lib

/var/www/html/lib/src

/var/www/html/lib/src/apple.php

這是初始目錄

在/var/www/html/lib

設定一個composer.json

1
2
3
4
5
6
7
8
9
10
11
12
{
    "require": {
         "guzzlehttp/guzzle": "~6.0",
         "facebook/php-sdk-v4": "~5.0"
    }
    ,
    "autoload":{
    	"classmap":[
    		"src"
    	]
    }
}

require裡面設定的值,是compser官方網站上提供的套件,而在autoload裡面,設定的是自己的套件,範例內我使用了兩個外部套件(guzzlehttp,facebook)跟自己的class,在這裡的設定中,自己的class只要設定目錄,他會遞回引入目錄內的檔案,你不需要指定檔案,如果要指定檔案的話,請設定為files.

2.執行composer install

bash~/var/www/html/lib> composer install

這時候 目錄改變了

增加了vendor 資料夾

/var/www/html/lib/vendor

 

3.引入autoload.php在

/var/www/html/index.php內 引入autoload.php

1
2
3
require ('lib/vendor/autoload.php'); 
$appleObj = new src\Apples\Apples(); 
$appleObj->eat();

apple.php內容

–/var/www/html/lib/src/apple.php

1
2
3
4
5
6
7
namespace src\Apples; 
class Apples { 
   public function eat() 
   { 
       echo "eat apple"; 
   } 
}

output

eat apple

 


 

composer 可以整合外部套件跟內部class做一個autoload的動作,不需要分門別類設定很多個資料夾與compser.json,只要通通整合在一起就可以了

而且compser本身也會自動設定autoload的路徑,自動對所有的檔案做遞回引用,非常的方便

如果不知道怎樣new一個整合後的class,可以參考/var/www/html/lib/vendor/composer/autoload_classmap.php

裡面會顯示

return array(
‘src\\Apples\\Apples’ => $baseDir . ‘/src/apple.php’,
);

左邊的index 就是你需要呼叫class路徑了

之後再不用寫很多的require了,一個compser install就搞定了,如果增加了新的程式與目錄在src內,只要用compser update就可以了

發佈留言