1. __set($name,$value)
当一个类中成员变量数量很多时,为了提供向外部的公共访问内部私有变量的接口,就要写很多setX getX方法,不方便
<?php
class MagicSet{
private $name;
private $sex;
private $age;
function __set($propertyName,$propertyValue){
$this->$propertyName = $propertyValue;
}
function say(){
echo "my name is: ".$this->name." ".$this->sex." ".$this->age;
}
}
$m = new MagicSet();
$m->name="haolei";
$m->sex="man";
$m->age=21;
$m->say();
?>
2. __get($name)
<?php
class MagicGet{
private $name;
private $sex;
private $age;
private function __set($propertyName,$propertyValue){
$this->$propertyName=$propertyValue;
}
private function __get($propertyName){
return $this->$propertyName;
}
function say(){
echo "my name is: ".$this->name." ".$this->sex." ".$this->age;
}
}
$mg = new MagicGet();
$mg->name="guowen";
$mg->sex="female";
$mg->age=25;
echo $mg->name."<br/>";
echo $mg->age."<br/>";
echo $mg->sex."<br/>";
?>
3. __isset() 和 __unset()
在此之前,我们先了解 isset() 和 unset() 分别是判断变量是否存在和删除指定变量的两个函数
当在类的外部使用这两个函数来判断和删除对象的变量时,如果变量是私有成员,那么isset() 和 unset() 就不起作用了,但如果在对象中存在 __isset() 和 __unset(),然后在外部 使用 isset() 和 unset() 就会自动调用类里的 __isset() 和 __unset()