加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > PHP > 正文

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();
  ?>
  输出结果
 
 

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读