一,__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,以上方法会出错。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号