Home >Backend Development >PHP Problem >How to use php magic methods __get() and __set()
"__set()" is automatically called when assigning a value to an undefined attribute, the syntax is "public function __set(key,value){}"; "__get()" is called when an undefined attribute is called, Syntax "public function __get(name){}".
The operating environment of this tutorial: windows7 system, PHP7.1 version, DELL G3 computer
The magic method in PHP usually starts with __( It starts with two underscores) and does not need to be explicitly called but is automatically called under certain conditions.
Magic method | Function |
---|---|
__set() | is giving undefined Automatically called when assigning a property |
__get() | Automatically called when calling an undefined property |
1. __set() method
When assigning a value to a class attribute that is undefined or invisible in the current environment, the __set() method will be automatically called. The syntax format for defining this method is as follows:
public function __set($key, $value){ ... ... ; }
Among them, the parameter $key is the name of the variable to be operated, and $value is the value of the variable $key.
[Example] The following uses a simple example to demonstrate the use of the __set() method.
<?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教程'; ?>
The running results are as follows:
为“url”赋值“https://www.php.cn/”失败! 为“title”赋值“PHP教程”失败!
Using the characteristics of the __set() method, we can use the __set() method to assign or modify the attributes modified with the private keyword in the class. . As shown below:
<?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(); ?>
The running results are as follows:
为“title”赋值“PHP教程”失败! https://www.php.cn/
2. The __get() method
is not defined or is not defined when calling or obtaining the current environment. When the class attribute is invisible, the __get() method will be automatically called. The syntax format for defining this method is as follows:
public function __get($name){ ... ... ; }
The parameter $name is the name of the variable to be operated.
[Example] The following uses a simple example to demonstrate the use of the __get() method.
<?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>'; ?>
The running results are as follows:
https://www.php.cn/ 获取:“name”失败! 获取:“title”失败!
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of How to use php magic methods __get() and __set(). For more information, please follow other related articles on the PHP Chinese website!