一,__get()
当实例化一个对象后,获取类中不存在或者没有权限访问的属性的时候,php会默认调用__get()方法;
实例
<?php class demo{ private $cat='mimi'; } $obj=new demo(); echo $obj->cat;//报错:无法访问私有属性; class demo{ private $cat='mimi'; public function __get($name){ return $this->$name; } } $obj=new demo(); echo $obj->cat;//返回'mimi' ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
二,__set()
当实例化一个对象后,更新类中不存在或者没有权限访问的属性的值的时候,php会默认调用__set()方法
实例
<?php class demo2 { private $dog = 'wangcai'; public function __get($name) { return $this->dog; } public function __set($name, $val) { return $this->$name = $val; } } $obj = new demo2(); echo $obj->dog='xiaohuang';//返回'xiaohuang'; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
三,__isset()
判断类里面某个属性是否存在,当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
实例
<?php class demo2 { private $dog = 'wangcai'; public function __get($name) { return $this->dog; } public function __set($name, $val) { return $this->$name = $val; } public function __isset($name) { return isset($this->$name); } } $obj = new demo2(); //echo $obj->dog='xiaohua'; echo isset($obj->dog)?'存在':'不存在';//返回'存在'; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
四,__unset()
在外部释放类中不可访问的属性时,系统自动调用;
实例
<?php class demo3{ private $name ='wcz'; public function __unset($name) return unset($this->$name); } public function __get($name){ return $this->name; } $obj=new demo3(); unset($obj->name); echo $obj->name; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结:
1,__get() :当获取类里面的不可访问的属性值时,php会自动调用魔术方法__get(),__get()必须有一个参数$name(被访问的属性名),
2,__set():更新类中不可访问的属性的值,php会调用魔术方法__set(),__set()有两个参数:$name(被更新的属性名),$value(更新后的值);
3,判断类中是否存在某个不可访问的属性时,要调用魔术方法__isset(),__isset()有一个参数:$name(被判断的属性名);
4,清空类中某个不可访问的属性值,php会调用魔术方法__unset(),__unset()有一个参数,$name(被清空的属性名),__unset没有返回值;
实际应用中,我们经常会将一些属性值设置为私有属性,当需要对这些不可访问的属性操作时,用到以上方法;如果把属性设置成static,以上方法会出错。