__set()、__get()、__isset()、__unset() 这四个方法都是我们添加到对象里面的,在需要时自动调用的,来完成在对象外部对对象内部私有属性的操作。
<?php
// __get()方法用来获取私有属性
function __get($property_name) {
if (isset($this->$property_name)) {
return ($this->$property_name);
} else {
return (NULL);
}
}
// __set()方法用来设置私有属性
function __set($property_name, $value) {
$this->$property_name = $value;
}
private function __isset($nm) {
echo "当在类外部使用isset()函数测定私有成员$nm时,自动调用<br />";
return isset($this->$nm);
}
private function __unset($nm) {
echo "当在类外部使用unset()函数来删除私有成员时自动调用的<br />";
unset($this->$nm);
}
最后补充说明:
1、__set(), __get() 是专门为类的私有属性(private、protected)设立的,对于类的公开(public)属性,外面是可以直接访问与设置的(如:$p1->name),即不走__set(),__get()函数的!!!
2、在PHP5.3及以后,上述魔术方法(__get(),__set(),__isset(),__unset() 等)提倡是 public 类型的,并且不是 static 方法,否则会给出警告信息!