Home  >  Article  >  Backend Development  >  Introduction to the usage of __get() and __set() in php_PHP tutorial

Introduction to the usage of __get() and __set() in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:14:43856browse

If you want to set some attributes of the object, it will be more troublesome if you set them one by one. In this case, you can use the object's processor functions __get() and __set(), but the prerequisites for using these two methods are: The attribute needs to be protected or private, as in the following example:

 代码如下 复制代码

 class Person
{
 private $__data = array();
 
 public function __get($property)
 {
  if (isset($this->__data[$property]))
  {
   return $this->__data[$property];
  }
  else
  {
   return false;
  }
 }
 
 public function __set($property, $value)
 {
  $this->__data[$property] = $value;
 }
}

The __set() and __get() methods are for protect or private attributes, so that the attributes cannot be directly accessed from the outside world, but they can be easily accessed through the publicly defined __set() and __get() methods. It, together with these two methods, has a relatively high versatility in operating attributes, and can also limit the legality of the object's attributes. Only attributes belonging to the $__data array can be set, which prevents the outside world from setting the attributes directly. But using __set() and __get() also has some shortcomings. First, these two methods will only capture private or protected attributes, that is, attributes that the outside world does not have access rights to, so PHP will report a fatal error; second, these two methods destroy the inheritance of attributes. If there is a __set() method in the parent object, and its own __get() method is implemented in the subclass, the object will not run normally because the __get() method of the parent object can never be adjusted. It cannot be obtained if you want to detect whether the overridden attribute exists, because it will not call the __get() method. I saw someone solve the above problem by implementing __isset() and __unset(). The code is as follows:

 代码如下 复制代码
 public function __isset($property)
{
 if (isset($this->data[$property]))
 {
  return true;
 }
 else
 {
  return false;
 }
}
 
public function __unset($property)
{
 if (isset($this->data[$property]))
 {
  return unset($this->data[$property]);
 }
 else
 {
  return false;
 }
}

Using __isset() and __unset() can ensure whether the attribute actually exists, but these two methods are only valid after PHP5.1.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/628952.htmlTechArticleIf you want to set some properties of the object, it will be more troublesome to set them one by one. In this case, you can use objects The processor functions __get() and __set(), but before using these two methods...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn