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

PHP 物件導向全攻略(六):__set、__get、__isset、__unset 存取私有屬性

     編輯:PHP 綜合知識

屬性多載魔術方法

將屬性設為 private 符合封裝原則,但外部無法直接讀寫。PHP 5 提供四個魔術方法攔截對不可見屬性的操作:

方法觸發時機參數回傳值
__get($name)讀取不可見屬性屬性名屬性值或 null
__set($name, $value)寫入不可見屬性屬性名、值無
__isset($name)isset($obj->prop)屬性名bool
__unset($name)unset($obj->prop)屬性名無

完整範例

class Person {
    private $name, $sex, $age;
    public function __get($name) {
        echo "__get() 呼叫:$name
"; return isset($this->$name) ? $this->$name : null; } public function __set($name, $value) { echo "__set() 呼叫:$name = $value
"; $this->$name = $value; } public function __isset($name) { echo "__isset() 呼叫:$name
"; return isset($this->$name); } public function __unset($name) { echo "__unset() 呼叫:$name
"; unset($this->$name); } } $p = new Person(); $p->name = "張三"; // 觸發 __set $p->sex = "男"; $p->age = 20; echo $p->name . "
"; // 觸發 __get echo $p->sex . "
"; echo $p->age . "
"; var_dump(isset($p->name)); // 觸發 __isset unset($p->name); // 觸發 __unset echo $p->name; // null(已刪除)

應用場景

  • 資料驗證:在 __set 中過濾非法值。
  • 延遲載入:在 __get 中按需從資料庫讀取。
  • 除錯紀錄:記錄屬性存取歷程。

這四個方法必須定義為 public 才會被自動呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved