類別結構範例
<?php
// 普通類別
class ClassDemo {
public $publicVar;
private $privateVar; // 僅本類別可存取
protected $protectedVar; // 本類別與子類別可存取
public static $staticVar = 0;
const CONST_VAR = 'constant';
public function __construct() {
$this->publicVar = 'value';
self::$staticVar++; // 內部存取靜態屬性
}
public function __destruct() {}
final public function finalMethod() {} // 禁止覆寫
}
// 抽象類別
abstract class AbstractDemo {
abstract protected function abstractMethod(); // 無主體,子類別必須實作
}
// 繼承
class DemoTwo extends ClassDemo {}
// 介面
interface Face {
public function name(); // 隱含 public abstract
}
interface Face2 extends Face {
const NAME_VAR = 20;
}
// 實作介面
class Demo implements Face2 {
public function name() { echo Face2::NAME_VAR; }
}
?>
靜態成員存取規則
| 位置 | 語法 | 範例 |
| 類別內部 | self:: | self::$staticVar, self::CONST_VAR |
| 子類別存取父類別 | parent:: | parent::$staticVar, parent::CONST_VAR |
| 外部 | ClassName:: | ClassDemo::$staticVar, ClassDemo::CONST_VAR |
靜態方法也可透過物件呼叫:$obj->staticMethod()。
關鍵字重點
- final:修飾方法禁止覆寫,修飾類別禁止繼承 (但可實例化)。不可修飾屬性。
- abstract:抽象類別不可實例化;含抽象方法的類別必須宣告 abstract;子類別必須實作所有抽象方法 (除非子類別也宣告 abstract)。
- 介面:定義規範,方法無主體、隱含 public abstract;屬性只能是常數;類別可實作多個介面;介面可繼承介面。
- Traits (PHP 5.4+):程式碼複用單位,
use TraitName; 於類別中引入,解決單一繼承限制。
魔術方法速查
| 方法 | 觸發時機 |
__construct() | 物件建立時 |
__destruct() | 物件銷毀/請求結束時 |
__call($name,$args) | 呼叫不可存取方法時 |
__callStatic($name,$args) | 靜態呼叫不可存取方法時 |
__get($name) | 讀取不可存取屬性時 |
__set($name,$value) | 寫入不可存取屬性時 |
__isset($name) | isset() 檢查不可存取屬性時 |
__unset($name) | unset() 不可存取屬性時 |
__sleep() | serialize() 前 |
__wakeup() | unserialize() 後 |
__toString() | 物件當字串使用時 |
__invoke() | 物件當函數呼叫時 |
__set_state($arr) | var_export() 匯出類別時 |
__clone() | clone 物件時 |
__debugInfo() | var_dump() 顯示物件時 |
類別/物件內建函數
class_exists(), interface_exists(), trait_exists() — 檢查定義
get_class($obj), get_parent_class($obj) — 取得類別名稱
get_class_methods($class), get_class_vars($class) — 反射方法/預設屬性
get_object_vars($obj) — 取得物件屬性陣列
method_exists($class,$method), property_exists($class,$prop) — 檢查存在性
is_a($obj,$class), is_subclass_of($obj,$class) — 繼承關係判斷
__autoload() / spl_autoload_register() — 自動載入類別
- 上一篇文章: PHP 入門教程:常用資料類型、基本語法與核心函數詳解
- 下一篇文章: PHP 條件判斷語句完整指南:if/else/switch/三元運算子與運算子優先序
Copyright ©
程式碼之家 All Rights Reserved