• PHP与类有关的几个魔术方法


    与类有关的其他魔术方法

    序列化与反序列化技术

    含义:

    序列化:

    就是将一个变量所代表的“内存”数据,转换为“字符串”形式并持久保存在硬盘上的一种做法。

    反序列化:

    就是将序列化之后保存在硬盘上的“字符串数据”,恢复为其原来的内存形式的变量数据的一种做法。

    序列化的做法:

    $v1 =  123; //这是一个变量,代表任意的内存数据

    $s1 =  serialize( $v1 ); //将任何类型的变量数据,转换为“字符串”

    file_put_contents( ‘要保存的目标文本文件’, $s1); //将该字符串,保存到一个文件里(就是硬盘数据)

    反序列化的做法:

    $s1 = file_get_contents( ‘保存序列化数据的目标文本文件’); //从一个文件里读出其中的所有字符

    $v1 =  unserialize( $s1 ); //将该字符串数据,反序列化转换为变量(数据)

    举例:

    先进行基本数据的序列化:

     

    再来对他们进行反序列化:

     

    __sleep():用于对象的序列化:

    1,对一个对象进行序列化,只能将其属性数据“保存起来”,而方法被忽略(方法不是数据)

    2,对象的序列化的时候,会自动调用该对象所属类的这个魔术方法:__sleep()(前提是有该方法)。

    且,此时,该方法必须返回一个数组,数组中是“计划”要进行序列化的属性名;

    举例:

    类文件内容如下:

     

    __wakeup:用于对象的反序列化:

    1,对一个对象进行反序列化,其实是恢复其原来保存起来的属性数据,而且,此时必然需要依赖该对象原本的所属类;

    2,对象在反序列化的时候,会自动调用该对象所属类的这个魔术方法:__wakeup()

    举例:

     

    下面演示可选属性的序列化(通过__sleep)

     

    然后,对其对象进行序列,并显示该对象的数据:

     

    然后,在另一个页面中,对其进行反序列化:

     

    __tostring()魔术方法——比较常用!

    含义:

    将一个对象“当做”一个字符串来使用的时候,会自动调用该方法,并且在该方法中,可以返回一定的字符串,以表明该对象转换为字符串之后的结果。

    注意:

    如果没有定义该方法,则对象无法当做字符串来使用!!!

     

    __invoke()魔术方法:

    将对象当作函数来使用的时候,会自动调用该方法。通常不推荐这么做。

    class  A{

    function  __invoke(){

    echo “<br />我是一个对象呀,你别当我是一个函数来随便调用!”;

    }

    }

    $obj1 = new A();

    $obj1(); //此时就会调用类中的方法:__invoke()

  • 相关阅读:
    【C++标准库】C++11新特性
    使用线程池
    Halcon相机硬触发采集图片
    C#之线程同步
    多线程之异常处理
    java基础 Arrays
    java基础 static关键字
    java基础 String
    c# 更新web.config
    java 基础
  • 原文地址:https://www.cnblogs.com/457248499-qq-com/p/7385285.html
Copyright © 2020-2023  润新知