__set()的作用:
__set():在給不可訪問屬性賦值(private,protected,不存在)時,php就會執行__set()方法。
上面我們說了__set()的作用是:在給不可訪問屬性賦值(private,protected,不存在)時,php就會執行__set()方法。
這個是什麼意思呢。比如說,我們還是以上面的執行個體為例。我們把猴子喜歡吃的桃子換成香蕉,但是根據規則來說,$food前面的關鍵詞是protected
,不能直接存取,但是我們又需要對$food賦值,我們該怎麼辦呢?
<?phpclass Monkey{public $name;protected $food;function __construct($name,$food){$this->name = $name;$this->food = $food;}function sayHello(){echo '<br/>我是' . $this->name . '我喜歡吃' . $this->food;}//魔術方法function __get($pro_name){//先判斷$pro_name是否存在if(isset($this -> $pro_name)){return $this -> $pro_name;}else{echo '屬性值不存在';}}function __set($pro_name,$value){//先判斷$pro_name是否存在if(isset($this -> $pro_name)){return $this -> $pro_name = $value;}else{echo '屬性值不存在';}$monkey = new Monkey('猴子' , '桃子')$monkey -> sayHello();echo '猴子喜歡吃' . $monkey -> food;$monkey -> food = '香蕉';echo '<br/>';$monkey -> sayHello();
因為我們的$food是保護的,所以不允許訪問。那麼,我們就要藉助__set()魔術方法來實現。__set()方法包含兩個參數,分別表示變數名稱和變數值,兩個參數不可省略。