隨著 PHP 專案規模增長,代碼復用、團隊協作、依賴管理成為核心痛點。PEAR(PHP Extension and Application Repository)不僅是套件倉庫,更是一套**編碼標準、目錄規範、基礎類庫**的綜合體系。本文解析 PEAR 核心價值、標準規範、基礎框架與實戰接入流程,助你編寫「可被社區擁抱」的優質 PHP 代碼。
PEAR 通過「約定優於配置」解決以上問題,正如 CPAN 之於 Perl、Maven 之於 Java、npm 之於 Node.js。
https://pear.php.net,數千個分類套件(DB、HTML_QuickForm、Mail、XML、Cache...)。Package_Category_SubCategory(如 DB_mysql、HTML_Template_IT)。package.xml)。PascalCase、方法/屬性 camelCase、常量 UPPER_SNAKE、私有成員前綴 _。@param、@return、@throws、@since、@deprecated。if () { 同行左大括號,else { 另起一行。pear run-phpt、PHP_CodeSniffer (PEAR 規則集)。兩大核心類構成「微內核」:
// PEAR.php 核心方法
class PEAR {
static function isError($obj) { return is_a($obj, 'PEAR_Error'); }
static function raiseError($msg, $code=null, $mode=null, $options=null, $userinfo=null) { ... }
static function setErrorHandling($mode, $options=null) { ... } // 全局錯誤模式
static function getStaticProperty($class, $var) { ... } // 跨實例靜態屬性
}
// PEAR_Error: 統一錯誤對象
$err = new PEAR_Error('DB Connection Failed', DB_ERROR_CONNECT_FAILED, null, null, $dsn);
if (PEAR::isError($result)) { echo $result->getMessage(); }
**關鍵特性**:析構函數模擬(PHP 4 時代遺產)、錯誤回調模式(die、print、callback、push)、錯誤碼標準化。
Net_DNS2/
├── Net/
│ └── DNS2.php # 主類:Net_DNS2
├── Net/DNS2/
│ ├── RR.php # 子類:Net_DNS2_RR
│ └── Packet.php
├── tests/
│ ├── Net_DNS2Test.php
│ └── AllTests.php
├── docs/
│ └── guide.md
├── package.xml # 元數據:名稱、版本、依賴、維護者、許可證
└── README.md
<?php
/**
* Net_DNS2 - DNS 協議解析與構建庫
*
* @category Networking
* @package Net_DNS2
* @author Your Name <you@example.com>
* @copyright 2024 Your Name
* @license BSD-3-Clause
* @version 1.0.0
* @link https://pear.php.net/package/Net_DNS2
*/
class Net_DNS2
{
// 靜態屬性緩存
private static $_cache = [];
/**
* 解析域名記錄
*
* @param string $domain 域名
* @param string $type 記錄類型 (A, AAAA, MX, TXT...)
* @return array|PEAR_Error 記錄陣列或錯誤對象
* @throws Net_DNS2_Exception
*/
public static function resolve($domain, $type = 'A')
{
// 參數驗證
if (!self::_validateDomain($domain)) {
return PEAR::raiseError('Invalid domain', Net_DNS2_ERROR_INVALID_DOMAIN);
}
// ... 核心邏輯
return $records;
}
// 私有方法前綴 _
private static function _validateDomain($domain) { ... }
}
?>
<?xml version="1.0" encoding="UTF-8"?>
<package version="2.0" xmlns="https://pear.php.net/dtd/package-2.0">
<name>Net_DNS2</name>
<channel>pear.php.net</channel>
<summary>DNS protocol parser and builder</summary>
<description>...</description>
<lead>
<name>Your Name</name>
<user>yourhandle</user>
<email>you@example.com</email>
<active>yes</active>
</lead>
<date>2024-04-12</date>
<version>
<release>1.0.0</release>
<api>1.0.0</api>
</version>
<stability>stable</stability>
<license uri="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</license>
<notes>Initial release</notes>
<dependencies>
<required>
<php>min="7.4"</php>
<pearinstaller>min="1.10.0"</pearinstaller>
</required>
</dependencies>
</package>
雖然 Composer 成為主流依賴管理器,但 PEAR 仍是系統級擴展、舊專案維護的標準途徑。
# PHP 7.4+ 內建 phar
wget https://pear.php.net/go-pear.phar
php go-pear.phar
# 交互式配置安裝路徑、php.ini include_path
| 命令 | 作用 | 範例 |
|---|---|---|
pear install Package_Name | 安裝套件(自動解析依賴) | pear install DB |
pear upgrade Package_Name | 升級指定套件 | pear upgrade MDB2 |
pear uninstall Package_Name | 移除套件 | pear uninstall HTML_QuickForm |
pear list | 列出已安裝套件版本 | - |
pear remote-list | 列出遠端倉庫所有可用套件 | - |
pear search keyword | 搜尋套件 | pear search template |
pear run-tests | 執行套件測試套件 | cd /path/to/pkg && pear run-tests |
pear package | 打包發布(生成 .tgz) | 在 package.xml 目錄執行 |
PATH 直接可用。composer require pear/pear_exception 等官方映射包。autoload.php 會掃描 PEAR 目錄(若在 include_path),或手動 require_once 'PEAR.php';。PEAR 確立了 PHP 社區早期的工程化基因:標準化、模組化、可發布化。雖然 Composer/Packagist 取代了其包管理地位,但 PEAR 編碼標準、錯誤處理模式、包結構規範仍深刻影響現代 PHP 框架(Symfony、Laravel、Zend/Laminas 均兼容 PEAR 風格)。遵循 PEAR 規範編寫代碼,意味著你的組件**天生具備進入主流生態的基因**。