__set() __get() __isset() __unset() 魔术方法都是针对私有属性的。
因为他直接的使用php的方法set(),get(),isset(),unset()对私有属性不起作用。
赋值的时候调用:__set() 两个参数
取值的时候调用: __get()
判断私有属性是否存在时候的调用:__isset()
删去私有属性时调用:__unset()
魔术方法__get($proName)
private __get($proName)
{
if($proName == "name")
{
return $this->$proName."abc";
}elsei if($proName == "age")
{
return $this->$proName-10;
}else{
return $this->$proName;
}
}
$p=new person("rooney","23","yangjiang");
echo $p->name;//__get方法
魔术方法__set($proName,$value)
类。。。start
private function __set($proName,$value)
{
// $this->$proName=$value;
if($proName="age")
{
if($value<0 || $value>150)
return;//不符合要求,退出
}
$this->$proName=$value
}
类。。。end
$p=new person("rooney","23","男");
$p->age="34";
$p->name="rooney";
魔术方法:__isset();
一下是共有的,public,私有属性他是没办法的。
isset()函数判断是否存在1有,空没
echo isset($p->name); 输出1
if(isset($p->name))
{
echo "属性存在<br/>"
}else{
echo "属性不存在"
}
}
------解决办法----->
在封装里面加入
private function__isset($proName)
{
return isset($this->$proName);
}
魔术方法:__unset();删除变量;清除对象的成员属性。
unset($p->name);但不能访问私有的属性name
同理;
class....start...
private function __unset($proName);
{
return unser("$this->$proName");
}
class....end...
$p= new Person("rooney","32","男")
unset($p->name)