**PHP Extension and Application Repository** — PHP 官方套件庫,類比 Perl CPAN。提供:
| 項目 | 規範 |
|---|---|
| 縮排 | 4 空格,禁 Tab |
| 控制結構 | `if (` `for (` 關鍵字後一空格,大括號獨立行,`else if` 寫 `elseif` |
| 函數呼叫 | `func($a, $b, $c)` 無空格貼緊括號,參數間 `, ` 一空格 |
| 函數定義 | `function foo($a, $b = null) {` 左大括號換行 (One True Brace) |
| 註釋 | 類/方法用 PHPDoc (`/** */`),行內用 `//` 或 `/* */`,禁 `#` |
| 引入檔案 | 無條件 `require_once`,條件 `include_once` (共用同一引入表) |
| PHP 標籤 | 全程 ``,禁短標籤 ` ?>` |
| 檔案頭 | 版權、授權、作者、CVS `$Id$`、Vim modeline |
| 常數命名 | 全大寫底線分隔,前綴套件名 `PACKAGE_CONSTANT` |
<?php
// File: Net/MyService.php
require_once 'PEAR.php';
class Net_MyService extends PEAR {
public function __construct($options = []) {
parent::__construct(); // 註冊 shutdown 解構
$this->_options = $options;
}
public function callApi($endpoint, $data) {
// 邏輯...
if ($error) {
return $this->raiseError('API call failed', 500); // 回傳 PEAR_Error
}
return $result;
}
// 解構函數模擬 (PHP 4/5 早期無 __destruct)
public function _Net_MyService() {
// 清理資源
}
}
// 使用
$svc = new Net_MyService(['timeout'=>10]);
$result = $svc->callApi('/users', ['id'=>1]);
if (PEAR::isError($result)) {
die($result->getMessage());
}
# 安裝 pear 套件管理器 (通常隨 PHP 安裝)
# Linux: apt install php-pear / yum install php-pear
# Windows: go-pear.phar
# 安裝套件
pear install DB
pear install HTML_QuickForm2
# 列出已安裝
pear list
# 更新通道
pear channel-update pear.php.net