“__set()”在給未定義的屬性賦值時自動調用,語法“public function __set(key,value){}”;“__get()”在調用未定義的屬性時調用,語法“public function __get(name){}”。
本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦
PHP 中的魔術方法通常以__(兩個下劃線)開始,並且不需要明確的調用而是在某種特定條件下自動調用的。
魔術方法 | 作用 |
---|---|
#__set() | 在給未定義的屬性賦值時自動呼叫 |
__get() | 呼叫未定義的屬性時自動呼叫 |
##1、__set() 方法
在為目前環境下未定義或不可見的類別屬性賦值時,會自動呼叫__set() 方法。定義此方法的語法格式如下:
public function __set($key, $value){ ... ... ; }其中,參數 $key 是要操作的變數名稱,$value 為變數 $key 的值。 ######【範例】下面使用簡單的範例來示範一下 __set() 方法的使用。 ###
<?php class Website{ public $name; private $url; public function __set($key, $value){ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new Website(); $object -> name = 'php中文网'; $object -> url = 'https://www.php.cn/'; $object -> title = 'PHP教程'; ?>###運行結果如下:###
为“url”赋值“https://www.php.cn/”失败! 为“title”赋值“PHP教程”失败!###利用__set() 方法的特性,我們可以透過__set() 方法為類別中的使用private 關鍵字修飾的屬性進行賦值或修改。如下所示:###
<?php class Website{ public $name; private $url = ''; public function __set($key, $value){ if(isset($this->$key)){ $this -> $key = $value; }else{ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } public function getUrl(){ echo $this -> url; } } $object = new Website(); $object -> name = 'php中文网'; $object -> url = 'https://www.php.cn/'; $object -> title = 'PHP教程'; $object -> getUrl(); ?>###運行結果如下:###
为“title”赋值“PHP教程”失败! https://www.php.cn/######2、__get() 方法#########在呼叫或取得目前環境下未定義或當不可見的類別屬性時,會自動呼叫__get() 方法,定義該方法的語法格式如下:###
public function __get($name){ ... ... ; }###參數$name 為要操作的變數名稱。 ######【範例】下面使用簡單的範例來示範一下 __get() 方法的使用。 ###
<?php class Website{ public $url = 'https://www.php.cn/'; private $name = 'php中文网'; public function __get($name){ echo '获取:“'.$name.'”失败!'; } } $object = new Website(); echo $object -> url.'<br>'; echo $object -> name.'<br>'; echo $object -> title.'<br>'; ?>###運行結果如下:###
https://www.php.cn/ 获取:“name”失败! 获取:“title”失败!###推薦學習:《###PHP影片教學###》###
以上是php魔術方法__get()和__set()怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!