| 特性 | 說明 |
| 可見性 | public/protected/private |
| 靜態成員 | static 屬性/方法屬於類別,非實例;self:: 存取;不可用 ->;子類別不可重新定義同名靜態成員。 |
| 常量 | const 定義類別常數,無 $ 符號,Class::CONST 存取。 |
| 抽象類別 | abstract class 不可實例化;含抽象方法必須宣告抽象類別;子類別必須實作所有抽象方法,可見性相同或更寬鬆。 |
| 介面 | interface 只定義方法簽名,全 public;implements 實作,可多介面;PHP 8+ 支援介面常數、預設實作。 |
| 重載 | __call/__callStatic、__get/__set/__isset/__unset 攔截不可見成員存取。 |
| 迭代器 | 實作 Iterator 或 IteratorAggregate 讓物件可 foreach。 |
設計模式精要
- 工廠模式:執行期依條件實例化具體類別,封裝建立邏輯。
- 單例模式:全域唯一實例(資料庫連線、配置管理)。
class DB {
private static $instance;
private function __construct() {}
public static function getInstance() {
if (!self::$instance) self::$instance = new self();
return self::$instance;
}
public function __clone() { trigger_error('Clone forbidden', E_USER_ERROR); }
}
- 觀察者、策略、裝飾者、適配器:常用於框架核心(Laravel Events、Middleware、Eloquent)。
魔術方法完整清單
| 方法 | 觸發時機 |
__construct | 實例化 |
__destruct | 銷毀(無參考或腳本結束) |
__call/__callStatic | 呼叫不可見方法 |
__get/__set/__isset/__unset | 存取不可見屬性 |
__sleep/__wakeup | serialize/unserialize |
__toString | 物件當字串使用 echo $obj |
__clone | clone $obj |
__autoload / spl_autoload_register | 類別未定義時自動載入 |
__invoke | 物件當函數呼叫 $obj() |
__set_state | var_export 匯出類別 |
__debugInfo | var_dump 顯示自訂屬性 |
關鍵字與進階特性
final:禁止類別被繼承、方法被覆寫。
- 型別提示:參數前加類別名強制型別(PHP 7+ 支援標量型別、回傳型別、
nullable、union)。
instanceof:檢查物件是否為某類別(或介面)實例。
- 腳本結尾
?> 可省略,避免輸出空白導致 Header 失效。
require() 失敗致命錯誤;include() 僅警告。
require_once() 防重複包含。
異常處理
class AppException extends Exception {}
try {
// risky code
} catch (AppException $e) {
// log, notify
} catch (Throwable $t) { // PHP 7+ 捕捉 Error + Exception
// fatal error handling
} finally {
// cleanup
}
學習路徑建議
- 官方手冊「語言參考」章節逐節閱讀(型別、變數、運算子、控制結構、函數、類別)。
- 實作小專案:留言板 → 部落格 → 簡易電商 → API 服務。
- 閱讀優秀開源專案原始碼:Laravel、Symfony、Slim、League 套件。
- 掌握 Composer、PSR 標準、PHPUnit、PHPStan/Psalm 靜態分析。
- 持續關注 PHP 版本釋出(每年 11 月),新特性優先試用(JIT、Attributes、Readonly、DNF 型別等)。
- 上一篇文章: PHP 易混淆函數大對決:echo/print、require/include、空字串/NULL、isset/empty、==/===
- 下一篇文章: PHP 整合 jQuery Ajax 跨域請求:JSONP 實作與安全注意事項
Copyright ©
程式碼之家 All Rights Reserved