搜索

查看: 3242|回复: 11

[PHP] php反序列化之魔术方法超详细讲解

[复制链接]
发表于 2023-5-4 17:07:09 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:07:09 3242 11 看全部
目录
  • php魔术方法
  • __construct()与__destruct()
  • __call
  • __get
  • __set
  • __isset
  • __unset
  • __sleep
  • __wakeup
  • __toString
  • __invoke
    php魔术方法
    在php类保留方法中以 “__”两个下划线开头的函数称为魔术方法,我的理解为php类设计中自定义好的函数。
    常见的魔术方法有:
    __construct(),类的构造函数
    __destruct(),类的析构函数
    __call(),在对象中调用一个不可访问方法时调用
    __callStatic(),用静态方式中调用一个不可访问方法时调用
    __get(),获得一个类的成员变量时调用
    __set(),设置一个类的成员变量时调用
    __isset(),当对不可访问属性调用isset()或empty()时调用
    __unset(),当对不可访问属性调用unset()时被调用
    __sleep(),执行serialize()时,先会调用这个函数
    __wakeup(),执行unserialize()时,先会调用这个函数
    __toString(),类被当成字符串时的回应方法
    __invoke(),调用函数的方式调用一个对象时的回应方法
    __set_state(),调用var_export()导出类时,此静态方法会被调用
    __clone(),当对象复制完成时调用
    __autoload(),尝试加载未定义的类
    __debugInfo(),打印所需调试信息

    __construct()与__destruct()
    __construct() 构造函数与 __destruct() 析构函数,与其他的语言如java,c#,一样,构造函数就是在对象实例化的时候先执行初始化的方法。
    __construct()构造函数只有在new 一个对象的时候会触发,在serialize 序列化和unserialize反序列化中都不会触发

    输出结果

    2022110216465424.png

    php反序列化之魔术方法超详细讲解5382 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __destruct() 析构函数则在对象销毁和serialize 反序列化的情况下会被触发。如下

    输出结果

    2022110216465425.png

    php反序列化之魔术方法超详细讲解3343 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __call
    __call 魔术方法的作用是当前对象调用一个不存在的方法时,就会被触发
    f2("123");//调用不存在的方法f2()
    ?>
    输出结果

    2022110216465426.png

    php反序列化之魔术方法超详细讲解1873 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __get
    __get() 魔术方法是当访问一个对象不存在的变量时就会被触发
    k;//不存在的变量k
    ?>
    输出结果

    2022110216465427.png

    php反序列化之魔术方法超详细讲解6724 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __set
    __set() 魔术方法是当给一个对象不存在的变量赋值时就会被触发
    k=123; //给不存在的成员变量赋值
    ?>
    输出结果

    2022110216465428.png

    php反序列化之魔术方法超详细讲解9972 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __isset
    当对不可访问属性调用isset()或empty()时会触发,例如访问类的私有属性,类不存在的成员属性
    k1);//使用isset方法判断私有成员属性k1
    empty($f2->k1);//使用empty方法判断私有成员属性k1
    ?>
    输出结果

    2022110216465429.png

    php反序列化之魔术方法超详细讲解6047 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __unset
    当尝试使用unset() 销毁函数去销毁一个不可访问的成员属性时会触发,不可访问(包括私有成员属性,不存在的成员属性)
    k1);//使用unset销毁私有成员属性k1
    unset($f2->faaa);//使用unset销毁不存在的成员属性faaa
    ?>
    输出结果

    2022110216465430.png

    php反序列化之魔术方法超详细讲解2479 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __sleep
    当对象被serialize 序列化时触发调用__sleep

    输出结果

    2022110216465431.png

    php反序列化之魔术方法超详细讲解7751 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __wakeup
    当进行unserialize 反序列化对象时,__wakeup魔术方法会被触发,看起来__wakeup与__sleep 触发条件是相反的

    输出结果

    2022110216465432.png

    php反序列化之魔术方法超详细讲解564 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __toString
    如果一个对象类中存在__toString魔术方法,这个对象类被当做字符串进行处理时,就会触发__toString魔术方法,而不会产生错误

    输出结果

    2022110216465433.png

    php反序列化之魔术方法超详细讲解4279 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    __invoke
    当一个对象类中存在__invoke魔术方法,这个对象类被当作函数进行调用时,就会触发__invoke魔术方法,而不会产生错误

    输出结果

    2022110216465434.png

    php反序列化之魔术方法超详细讲解4138 作者:Editor 帖子ID:3001 论坛知鸟论坛_zn60.com


    到此这篇关于php反序列化之魔术方法超详细讲解的文章就介绍到这了,更多相关php反序列化 内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 18:48:31 | 显示全部楼层
    老橡树1 2023-6-28 18:48:31 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-6-29 17:35:45 | 显示全部楼层
    伊索谗言 2023-6-29 17:35:45 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 00:06:05 | 显示全部楼层
    123456833 2023-6-30 00:06:05 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 12:13:48 | 显示全部楼层
    永远就三年疗 2023-6-30 12:13:48 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-6-30 21:29:58 | 显示全部楼层
    我的苦恼冉 2023-6-30 21:29:58 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-30 22:44:47 | 显示全部楼层
    我是的十八簿 2023-6-30 22:44:47 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-7-1 00:14:05 | 显示全部楼层
    执着等待等wc 2023-7-1 00:14:05 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-7-1 20:08:54 | 显示全部楼层
    落败的青春阳落s 2023-7-1 20:08:54 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-7-3 06:55:14 | 显示全部楼层
    Gordon520 2023-7-3 06:55:14 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表