__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)