PHP 面向对象基础:__set () 和 __get () 方法
__set() 和 __get() 属于 PHP 中的 魔术方法。在给不可访问的属性赋值时, __set() 会被调用。读取不可访问属性的值时, __get() 会被调用。如果一个类中有保护属性或者私有属性,在类外不能直接赋值和使用,只有通过类中成员函数对它们进行操作,而 __set() 和 __get() 能够实现这样的功能。
class Person{ // 私有属性人名 private $name; // 类中成员函数用于私有属性赋值 public function setName($name){ $this->name = $name; } // 类中成员函数用于私有属性获值。 public function getName(){ return $this->name; } } $person = new Person(); //通过成员函数赋值 $person->setName("Michael"); //通过成员函数获值 echo "Name: " . $person->getName() . "<br />"; 运行以上代码输出
Name: Michael __set() 和 __get() 实现
class Person { // 保护属性年龄 protected $sex; // 私有属性性别 private $age; // / __set() 设置不可访问属性值 public function __set($property, $value) { echo '外部对象设置不可访问属性值的时候,__set() 魔术方法被自动调用为其赋值' . '<br />'; $this->$property = $value; } // __get() 获取不可访问属性值 public function __get($property) { echo '外部对象获取不可访问属性值的时候,__get() 魔术方法被自动调用为其获值' . '<br>'; if (isset($this->$property)) { return($this->$property); } else { return null; } } } $person = new Person(); $person->sex = 'male'; echo 'Gender: ' . $person->sex . '<br />'; 运行上述代码输出
外部对象设置不可访问属性的时候,__set() 魔术方法被自动调用为其赋值 外部对象获取不可访问属性的时候,__get() 魔术方法被自动调用为其获值 Gender: male $person->age = 55; echo 'Age: ' . $person->age . '<br />'; 运行上述代码输出
外部对象设置不可访问属性值的时候,__set() 魔术方法被自动调用为其赋值 外部对象获取不可访问属性值的时候,__get() 魔术方法被自动调用为其获值 Age: 55
PHP 社区 Wiki
关于 LearnKu