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

PHP 類別與物件完整指南:封裝、繼承、介面、Traits 與魔術方法

     編輯:PHP 相關知識

類別結構範例

<?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; 於類別中引入,解決單一繼承限制。

魔術方法速查

類別/物件內建函數

  • 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() — 自動載入類別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法觸發時機
__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() 顯示物件時