PHP反序列化部分知识点
PHP反序列化
魔术方法
一个预定义好的,在特定情况下自动触发的行为方法。
反序列化过程中,unserialize()接受的值(字符串)可控;通过更改这个值(字符串),得到所需要的代码;通过调用魔术方法,触发代码的执行。
1.__construct()
构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法。
在实例化时触发它。
2.__destruct()
析构函数,在对象的所有引用被删除或者当对象被显示销毁时执行的魔术方法。
实例化对象结束后,代码运行完全销毁会触发。
在序列化过程中不会触发。
在反序列化过程中触发,反序列化得到的对象,用完后会销毁,触发它。
3.__sleep()
序列化之前会触发。
此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。
如果该方法未返回任何内容,则NULL被序列化,并产生一个E_NOTICE级别的错误。
它需要参数,参数为成员属性。
最后会返回需要被序列化存储的成员属性。
4.__wakeup()
反序列化之前会触发。
反序列化之前会检查是否存在这个魔术方法,如果存在,则会先调用,预先准备对象需要的资源,返回void。
常用于反序列化操作中重新建立数据库连接或执行其他初始化操作。
5.__toString()
把对象当成字符串调用时,会触发。
例如我们去echo字符串时,echo ‘string’,如果里面是个对象就会触发这个魔术方法。
调用对象可以使用print_r或者var_dump。
echo和print会导致对象被当作为字符串使用。
6.__invoke()
把对象当成函数调用。
例如有一个 function abc(){} 和一个对象 $test
我们 abc(); 会调用这个函数,同理如果我们去写成 $test(); 就相当于把对象当做函数来用,就会触发这个魔术方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mash1r0!