php中的__get和__set

php也是面向对象的,所以就应该符合封装、抽象、多态这三大特性。属性封装是面向对象最基本要做的,于是人们在有了相应的get和set的方法。但是每个属性都得写这么个方法好累啊,所以就看到了__get__set魔术方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Demo3 {
private $a = 'this is a';
// 当访问对象中的属性不存在或者非公有属性的时候自动加载__get()方法
public __get($key) {
return isset($this->$key) ? $this->$key : null;
}
// 当给对象的一个属性赋值的时候如果该属性不存在或者是非公有属性则自动加载__set()方法
public __set($key, $val) {
$this->$key = $val;
}
}