php反序列化之魔术方法超详细讲解
发布时间:2023-02-16 12:38:12 所属栏目:PHP 来源:互联网
导读:序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。php将数据序列化和反序列化会用到两个函数:serialize 将对象格式化成有序的字符串、unserialize 将字符串还原成原来的对象 php魔术方法 在php类保留方法中以 __两个下划线
serialize($f); ?> 输出结果 __wakeup 当进行unserialize 反序列化对象时,__wakeup魔术方法会被触发,看起来__wakeup与__sleep 触发条件是相反的 <?php header("Content-Type:text/html;charset=utf-8"); highlight_file(__FILE__); class demo1{ private $k1; public function f1(){ echo("f1 函数被调用"); } public function __wakeup() { echo("在被反序列化时被调用"); } } $f=new demo1(); $uz=serialize($f); echo("00000"."</br>"); unserialize($uz); ?> 输出结果 __toString 如果一个对象类中存在__toString魔术方法,这个对象类被当做字符串进行处理时,就会触发__toString魔术方法,而不会产生错误 <?php header("Content-Type:text/html;charset=utf-8"); highlight_file(__FILE__); class demo1{ private $k1; public function f1(){ echo("f1 函数被调用"); } public function __toString() { echo("__toString 被触发了"); return ""; } } $f=new demo1(); echo($f); ?> 输出结果 __invoke 当一个对象类中存在__invoke魔术方法,这个对象类被当作函数进行调用时,就会触发__invoke魔术方法,而不会产生错误 <?php header("Content-Type:text/html;charset=utf-8"); highlight_file(__FILE__); class demo1{ private $k1; public function f1(){ echo("f1 函数被调用"); } public function __invoke() { echo("__invoke 被触发了"); } } $f=new demo1(); $f(); ?> 输出结果 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |