PHP中魔術方法__get和__set的用法
阿新 • • 發佈:2018-11-25
PHP中,魔術方法有很多種,本文章給大家記錄分享:__get\__set的用法跟理解
首先,我們得明白oop中的三個訪問修飾符:public、protected、private
分別的意思:
1、公共的,任何地方都可以訪問,包括本類,子類,外部
2、受保護的成員屬性或者方法,只能在本類或者子類中訪問
3、私有的,只能在本類中訪問
那麼__get,__set就跟這修飾符存在跟很大的關係
- __get:當訪問一個不是公開成員屬性時被呼叫,一個不存在的屬性被呼叫也會執行
- __set:當給一個不是公開成員屬性賦值時被呼叫,給一個不存在的屬性賦值也會執行
看案例程式碼:
<?php class Car { protected $price = 300000; } /* *魔術方法 __get *@param pre_name 屬性名稱 */ function __get($pre_name) { if(isset($this->$pre_name)) { return $this->$pre_name; } else { echo '此屬性不存在'; } } /* *當訪問一個受保護的屬性時 __get被呼叫 *此時通過魔術方法讓外部也可以訪問到 */ $lexus = new Car(); echo $lexus->price; //輸出300000 /* *當訪問一個不存在的屬性時 __get也會被呼叫 */ echo $lexus->types; //輸出:此屬性不存在 ?>
這是一個車類,價格不是公開的,當某個人硬是要知道這輛雷克薩斯的價格時,可以用__get方法。
下面是__set
<?php class Car { protected $price = 300000; } /* *魔術方法 __set *@param pre_name 屬性名稱 val 屬性值 */ function __set($pre_name,$val) { if(isset($this->$pre_name)) { $this->$pre_name = $val; } else { echo '此屬性不存在'; } } /* *當設定一個不公開的屬性值時 __set被呼叫 */ $lexus = new Car(); $lexus->price = 3000000; /* *當設定一個不存在的屬性時 __set也會被呼叫 */ $lexus->types = 'XFS'; //輸出:此屬性不存在 ?>