php – Composer – 非常簡單的使用 psr-4 來建立自動讀取類別
使用 Composer 支援的 psr-4 規範,我們只要設定好一次 Composer 的命名空間 Namespace,當日後增加類別的時候,就能非常簡單的自動讀取。在這之前,你需要有
- 電腦已經裝好 Composer
- 曾經使用過 Composer init 與 Composer install 的經驗
準備好範例的目錄
- public 演示放置公開的檔案,例如 index.php
- src 演示未來增加的類別
1 2 3 4 5 6 |
/public index.php /src /composer.json |
初始化 Composer.json
/composer.json
1 2 3 4 5 6 7 8 9 |
{ "autoload": { "psr-4": { "Jsn\\": "src/Jsn" } } } |
根命名空間「Jsn」的路徑指向「src/Jsn」,接著執行 dump-autoload (簡寫為 dump) 讓 Composer 幫我們初次建立命名空間。
1 2 3 |
composer dump |
目錄架構就會變成
1 2 3 4 5 6 7 8 9 10 |
/public index.php /src /vendor /composer /......略 autoload.php /composer.json |
嘗試建立自訂類別
第一個類別:使用者喜歡的電影
因為:命名空間/過度路徑/檔案.php
所以:/src/Jsn/User/Like/Movie.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace Jsn\User\Like; class Movie { public function get() { return ['Movie_A']; } } |
在 /public/index.php 寫入
1 2 3 4 5 6 7 |
<?php require_once '../vendor/autoload.php'; $movie = new \Jsn\User\Like\Movie; print_r($movie->get()); // Array ( [0] => Movie_A ) |
假設還有類別:使用者喜歡的書籍
因為:命名空間/過度路徑/檔案.php
所以:/src/Jsn/User/Like/Book.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace Jsn\User\Like; class Book { public function get() { return ['Book_A']; } } |
接著 /public/index.php 寫入
1 2 3 4 5 6 7 8 9 |
<?php require_once '../vendor/autoload.php'; //....省略 $book = new \Jsn\User\Like\Book; print_r($book->get()); // Array ( [0] => Book_A ) |
若想在其他路徑建立類別:設定
因為:命名空間/過度路徑/檔案.php
所以:/src/Jsn/Config.php
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php namespace Jsn; class Config { public function get() { return ['Say' => 'Hello World']; } } |
接著 /public/index.php 寫入
1 2 3 4 5 6 7 8 9 |
<?php require_once '../vendor/autoload.php'; // ... 省略 $config = new \Jsn\Config; print_r($config->get()); // Array ( [Say] => Hello World ) |
掌握 3 點
- 命名空間 + 類別名稱 = 路徑 + 檔名.php
- 命名空間、類別,都需要開頭大寫
- 下滑線不要拿來當作分類,例如:Like_Book.php、Like_Movie.php,應該改成路徑 Like/Book.php、Like/Movie.php
Comments