__set()的作用:
__set():在給不可存取屬性賦值(private,protected,不存在)時,php就會執行__set()方法。
上面我們說了__set()的作用是:在給不可存取屬性賦值(private,protected,不存在)時,php就會執行__set()方法。
這個是什麼意思呢。比如說,我們還是以上面的實例為例。我們把猴子喜歡吃的桃子換成香蕉,但是根據規則來說,$food前面的關鍵字是protected
,不能直接訪問,但是我們又需要對$food賦值,我們該怎麼辦呢?
<?php class 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()方法包含兩個參數,分別表示變數名稱和變數值,兩個參數不可省略。
以上是魔術方法__set()實例詳解(php物件導向教學課程)的詳細內容。更多資訊請關注PHP中文網其他相關文章!