您的位置:首页 > 新闻 > 热点要闻 > 建e室内设计_建站公司可靠吗_新郑网络推广公司_网站制作开发

建e室内设计_建站公司可靠吗_新郑网络推广公司_网站制作开发

2026/1/23 12:13:30 来源:https://blog.csdn.net/2302_79590880/article/details/143294486  浏览:    关键词:建e室内设计_建站公司可靠吗_新郑网络推广公司_网站制作开发
建e室内设计_建站公司可靠吗_新郑网络推广公司_网站制作开发

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

本文整理php反序列化中常见的魔术方法

当资料遇到查阅用

 总览

属性类型小插曲

public属性是公有属性,可以在类外被调用修改。

private属性是私有属性,只能在类中调用与修改。

各个魔术方法演示

__construct与__destruct

作用:

__construct类在实例化的时候就会执行

__destruct类在去实例化或者执行完毕后执行

小案例

<?php
class student{public $name;public $age;public function __construct($name){$this->name=$name;echo "类执行前会执行__construct\n";}public function __destruct(){echo "类结束之后会执行__destruct\n";}
}$a=new student("张三");
echo $a->name,"\n";
?>

执行结果如下

 __sleep

作用:

当类对象执行序列化操作的时候就会执行这个方法

即,当对象执行serialize();时就会执行这个方法

小案例

<?php
class student{public $name="初始值";public $age;public function __sleep(){$this->name="张三";echo "当这个类被序列化时__sleep就会被执行\n";}}$a=new student();
echo $a->name,"\n";
serialize($a);
echo $a->name;
?>

结果如下

__wakeup

作用:

执行反序列化时执行这个方法

即,当对象执行unserialize();时就会执行这个方法

小案例

<?php
class student{public $name="初始值";public $age;public function __wakeup(){$this->name="张三";echo "当这个序列被反序列化时__wakeup就会被执行\n";}}$a=new student();
echo $a->name,"\n";
$b=serialize($a);
$c=unserialize("$b");
echo $c->name,"\n";
?>

结果如下

__invoke

作用:

当类对象被当做函数调用时就会调用

小案例

<?php
class student{public $name="初始值";public $age;public function __invoke(){echo "__invoke函数被执行";}}$a=new student();
$a();
?>

结果如下

__toString

作用:

当类对象被当做字符串处理的时候,就会执行这个函数。

小案例

<?php
class student{public $name="初始值";public $age;public function __toString(){echo "__toString被执行";}
}$a=new student();
echo $a;
?>

结果演示

__call

作用:

调用某个方法时,方法存在就调用对应方法,方法不存在则调用__call

小案例

<?php
class student{public $name="初始值";public $age;public function __call($name,$parameter){echo "很明显木得$name 方法,以及$parameter 参数也没有,所以__CALL被调用了";}
}$a=new student();
$a->hello();
?>

结果输出

__get

作用:

当读取一个属性时,属性存在读取属性,不存在则调用get函数

小案例

<?php
class student{public $name="初始值";public $age;public function __get($n){echo "没有$n 这个属性,所以执行了__get";}
}$a=new student();
echo $a->aaa;
?>

结果如下

__set

作用:

当设置的属性不存在或者为私有属性的时候就会执行__set魔术方法

小案例

<?php
class student{public $name="初始值";public $age;public function __set($name,$value){echo "没有$name";echo "记录你设置的值为:$value";}
}$a=new student();
echo $a->aaa=111;
?>

结果如下

__isset

作用:

当用isset或者empty检测私有属性,或者不存在的属性时就会执行这个东西

小案例

<?php
class student{public $name="初始值";private $age;public function __isset($name){echo "没有$name 或者为私有";}
}$a=new student();
echo isset($a->b),"\n";
echo isset($a->age);
?>

结果如下

__unset

作用:

当调用unset销毁类属性时,类属性不存在或者私有时调用此方法。

小案例

<?php
class student{public $name="初始值";private $age;public function __unset($name){echo "没有$name 或者为私有";}
}$a=new student();
unset($a->age);
?>

结果如下

上述魔术方法的常见反序列利用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com