前言
本文為《現代 PHP》一書的學習筆記。
環境
PSR-3
第三個 PHP-FIG 建議,並不是一個指南,而是一個介面,規定了可以被 PHP 紀錄者元件所實作的方法。
紀錄者是個物件,用來輸出不同重要等級的訊息,被紀錄的訊息是用來診斷、分析和檢查應用程式的流程、穩定性和效能。
PSR-3 介面遵循 RFC 5424 syslog 協定,規定了以下九個方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| namespace Psr\Log;
interface LoggerInterface { public function emergency($message, array $context = array()); public function alert($message, array $context = array()); public function critical($message, array $context = array()); public function error($message, array $context = array()); public function warning($message, array $context = array()); public function notice($message, array $context = array()); public function info($message, array $context = array()); public function debug($message, array $context = array()); public function log($message, array $context = array()); }
|
- 介面中方法的第一個參數
$message
必須是一個字串或擁有 __toString()
方法的物件。
- 介面中方法的第二個參數
$context
不是必要的,提供了一個陣列的値,用來替換第一個參數 Token
。
假如今天需要一個 PSR-3 紀錄器,可以直接使用 Monolog 元件。
範例 3-1:使用 Monolog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| require 'vendor/autoload.php';
use Monolog\Logger; use Monolog\Handler\StreamHandler;
date_default_timezone_set('America/New_York');
$log = new Logger('myApp'); $log->pushHandler(new StreamHandler('logs/development.log', Logger::DEBUG)); $log->pushHandler(new StreamHandler('logs/production.log', Logger::WARNING));
$log->debug('This is a debug message'); $log->warning('This is a warning message');
|
PSR-4
第四個 PHP-FIG 建議,描述了一個標準化的自動載入策略,自動載入器是一個尋找並載入 PHP 類別、介面和特徵機制的策略。
在程式執行時期,自動載入器在有需要時把成員載入到 PHP 直譯器中,僅需要一個自動載入器,就可以定位所有支援 PSR-4 自動載入器標準的 PHP 元件和框架。
PSR-4 的精神在於對應名稱空間的字首到特定檔案系統目錄。
範例 3-2:PSR-4 自動載入器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| spl_autoload_register(function ($class) {
$prefix = 'Foo\\';
$base_dir = __DIR__ . '/src/';
$len = strlen($prefix); if (strncmp($prefix, $class, $len) !== 0) { return; }
$relative_class = substr($class, $len);
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
if (file_exists($file)) { require $file; } });
|
如果需要自動生成 PSR-4 自動載入器,直接使用 Composer 相依性管理器即可。
參考資料
- Josh Lockhart(2015)。現代 PHP。台北市:碁峯資訊。