首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 面向對象基礎核心知識點總結(一):類型提示、繼承、靜態、抽象、接口、異常、魔術方法、自動加載

     編輯:PHP 綜合知識

前言

PHP 5/7/8 逐步完善了面向對象特性。本文梳理 16 個核心知識點,涵蓋類型系統、繼承機制、靜態成員、抽象與接口、異常處理、攔截器、生命周期、克隆、自動加載、反射等,適合進階學習與面試複習。

核心知識點速查表

1. 字符串 "false" 的布爾判斷

if ("false") // true!非空字符串均為 true
// 正確判斷布爾字符串:
$val = filter_var("false", FILTER_VALIDATE_BOOLEAN); // false

2. 類型檢查函數族

is_array(), is_object(), is_string(), is_null(), is_int(), is_float(), is_bool(), is_callable(), is_iterable()

3. 類型提示

function write(ShopProduct $product) {} // 僅限類/接口,不支援標量(PHP 7.0+ 支援標量提示)
// PHP 7.4+ 類型屬性
class Foo { public string $name; }

4. instanceof 操作符

if ($obj instanceof BookProduct) {}
// 也可用於接口、父類判斷

5. 繼承與父類調用

class Child extends ParentClass {
    public function __construct() {
        parent::__construct(); // 必須顯式調用
    }
}

6. 靜態屬性與方法

class StaticExample {
    public static string $name = 'PHP';
    public static function hello(): string { return "Hello " . self::$name; }
}
// 外部訪問
echo StaticExample::$name;
echo StaticExample::hello();
// 內部訪問用 self:: 或 static::(晚靜態綁定)

7. 抽象類與抽象方法

abstract class BaseWriter {
    abstract public function write(string $data): void; // 無方法體
    public function save() { /* 通用邏輯 */ }
}
class JsonWriter extends BaseWriter {
    public function write(string $data): void { /* 實現 */ }
}

子類實現的訪問權限不能比抽象方法更嚴格(如 abstract protected → 子類必須 protected/public)。

8. 接口

interface Loggable {
    public function log(string $msg): void;
}
class FileLogger implements Loggable {
    public function log(string $msg): void { /* 寫文件 */ }
}
// 一個類可 implements 多個接口

9. 異常處理

try {
    risky();
} catch (SpecificException $e) {
    // 處理特定異常
} catch (Throwable $e) { // PHP 7+ 統一捕獲 Exception & Error
    // 記錄日誌
    throw $e; // 重新拋出
} finally {
    // 清理資源
}

10. 魔術攔截器

方法觸發時機
__get($name)讀取不可訪問/不存在屬性
__set($name, $value)寫入不可訪問/不存在屬性
__isset($name)isset() 檢查不可訪問屬性
__unset($name)unset() 不可訪問屬性
__call($name, $args)調用不可訪問/不存在方法
__callStatic($name, $args)靜態調用不存在方法

典型應用:動態屬性代理、只讀屬性、方法分發。

11. 解構方法 __destruct()

對象銷毀前自動調用,用於釋放資源(關閉連接、寫入緩存)。注意:腳本結束時不保證調用順序,不要在析構函數中依賴其他對象。

12. 克隆 __clone()

$obj2 = clone $obj1; // 淺拷貝
// 若需深拷貝,實現 __clone() 手動 clone 內部對象屬性

PHP 5+ 對象賦值/傳參默認引用,clone 產生獨立副本。

13. 自動加載 __autoload() / spl_autoload_register()

// 老式(已棄用)
function __autoload($class) { include "$class.php"; }

// 現代標準:PSR-4 + Composer 自動加載
// composer.json: "autoload": { "psr-4": { "App\\": "src/" } }
// 運行 composer dump-autoload 生成 vendor/autoload.php
require __DIR__ . '/vendor/autoload.php'; // 一行搞定所有類加載

14. 動態類/方法調用

$class = 'Task';
$method = 'getTitle';
$obj = new $class();
$obj->$method(); // 可讀性較差,慎用

15. 類/對象檢查函數

class_exists('Foo');
get_declared_classes();
get_class_methods($objOrClass);
method_exists($obj, 'method');
is_callable([$obj, 'method']);
get_class_vars('Foo');
get_parent_class($obj);
is_subclass_of($obj, 'Base');

16. 反射 API

$ref = new ReflectionClass('SomeClass');
$props = $ref->getProperties();
$methods = $ref->getMethods();
$constructor = $ref->getConstructor();
$instance = $ref->newInstanceArgs($args); // 動態實例化
// 可獲取註解、修飾符、參數類型等元數據

進階提示

  • PHP 8.0+ 引入 match、attributes、constructor promotion、union types、named arguments,極大增強 OOP 表達力。
  • 嚴格模式 declare(strict_types=1); 強制類型檢查,建議所有新項目開啟。
  • 遵循 PSR-12 編碼風格、PSR-4 自動加載,配合 PHPStan/Larastan 靜態分析,構建高質量代碼庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved