系統梳理 PHP OOP 基礎:從函數到類、對象實例化、三大特性(封裝/繼承/多態)、靜態屬性方法、類常量、構造析構、$this、self、parent、static 晚靜態綁定等核心概念。
// 內置函數直接用;自定義函數支援預設參數、引用傳遞、可變參數
function dump($var = null) {
echo '<pre>';
var_dump($var);
}
class Person {
// 屬性(成員變量)
private $eye = '大眼睛';
private $mouth = '小嘴巴';
private $leg = '大長腿';
// 構造方法:new 時自動調用
public function __construct() {
echo __CLASS__; // 輸出類名
}
// 方法
public function run() {
echo $this->leg; // $this 訪問對象屬性
}
public function study() {
echo $this->leg, $this->eye, $this->mouth;
}
}
// 實例化
$person = new Person(); // 輸出 Person
$person->run(); // 輸出 大長腿
$person->study(); // 輸出 大長腿大眼睛小嘴巴
| 修飾符 | 類內部 | 子類 | 外部 |
|---|---|---|---|
| public | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ❌ |
| private | ✅ | ❌ | ❌ |
私有成員子類不可直接訪問,需在子類重寫或提供公共 getter/setter。
class A {
public function help() { echo __METHOD__; }
private function eat() { echo __METHOD__; }
}
class B extends A {
public function doSomething() {
$this->help(); // 繼承 public
// $this->eat(); // 錯誤:private 不可訪問
}
public function eat() { echo __METHOD__; } // 重寫
}
$b = new B;
$b->doSomething();
// 輸出:A::help
// B::eat
new 即可調用:ClassName::method()。self:: 訪問靜態成員,$this 不可用於靜態上下文。class Url {
public static function createUrl($arr = []) { echo __METHOD__; }
public static function redirect($url = '') { echo __METHOD__; }
public static function getCurrentUrl() { echo __METHOD__; }
}
Url::createUrl();
Url::redirect('/home');
Url::getCurrentUrl();
class Url {
const BASE = 'https://example.com';
public static $version = '1.0';
public static function info() {
echo self::BASE; // 類常量
echo self::$version; // 靜態屬性
}
}
Url::info();
self:當前類(編譯時綁定)。parent:父類。static:晚靜態綁定(PHP 5.3+),指向實際調用的類。final:禁止繼承/重寫。abstract:抽象類/方法,強制子類實現。interface:介面,定義契約。trait:代碼復用單元,橫向組合。