“__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){ ... ... ; }
<?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教程”失败!
<?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/
public function __get($name){ ... ... ; }
<?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魔術方法__get()和__set()怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!