__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); 输出1if(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)