php – composer.json 設定 classmap 指定自動讀取的檔案或路徑
置入類別
若我們有2個 Library ,位於 Jsn/Cart/lib/Cart.php
<?php namespace Jsn; class Cart { public function add() { return "Cart Success"; } }
與 Jsn/Cart/lib/Transport.php
<?php namespace Jsn; class Transport { public function add() { return "Transport Success"; } }
因為我們要用 Composer 的 classmap 設定。必須要符合 psr-0(已棄用), psr-4 的規範,所以類別一定要按照格式,例如我上面的就有按照psr-4。詳細說明參考原文,或中文網友翻譯。基本上注意這幾點就可以
- 一定要有命名空間,如 namespace Jsn
- 可以有子命名空間,可能長這樣 “namespace Jsn\DB\Mysql” “namespace Jsn\DB\Pdo”,那麼 DB 就是子命名名空間
- 下滑線沒有意義,所以不要再使用了
- 敏感大小寫區分
所以基本上我們會這麼使用類別
new Jsn\Cart; new 命名空間\{可有可無的子命名空間}\類別名稱
告訴 Composer 路徑
在 composer.json 添加 autoload 設定
{ "autoload" : { "classmap": [ "Jsn/Cart/lib" ] } }
composer 傾倒
接著下命令讓 composer 傾倒 composer dump-autoload 。如果路徑設定沒問題,就會顯示 Generating autoload files 字句。我們可以檢查 vendor/composer/autoload_classmap.php 有幫你自動寫入路徑。
return array( 'Jsn\\Cart' => $baseDir . '/Jsn/Cart/lib/Cart.php', 'Jsn\\Transport' => $baseDir . '/Jsn/Cart/lib/Transport.php', );
測試看看
<? //若使用 codeigniter 那麼這句應該是交由 config.php 決定,而不需要寫這行 require_once "vendor/autoload.php"; $cart = new Jsn\Cart; echo $cart->add(); // output: Cart Success $tra = new Jsn\Transport; echo $tra->add(); // output: Transport Success