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