再不系统学这个恐怕校赛都过不去!

常用魔术方法触发方式总结:

方法名字 描述
__construct() php中构造方法是对象创建完成后第一个被对象自动调用的方法,如对成员属性在创建对象时赋予初始值
__destruct() 简称回收垃圾函数,当所有方法执行完成后被调用,当对象不能被访问时就会自动启动垃圾回收机制,收回对象占用的内存空间。而析构函数正是在垃圾回收机制回收对象之前调用的。
__wakeup() 当进行unserialize()反序列化之后立即被调用当在反序列化字符串当中如果表示属性个数的值大于其真实值,则跳过该魔术方法
sleep() 当你使用一个序列化函数serialize()的时候,该函数会检查代码中是否存在__sleep()函数。一旦存在这个函数便会优先执行__sleep(),然后再去执行原来的序列化,serialize()找sleep(),但是sleep也控制着serialize()的返回值,把握着把柄呢 sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。
__call() 当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call()方法来存储方法名以及其参数。__call()方法包含两个参数,即方法名和方法参数。其中,方法参数是以数组的形式存在的调用了不存在或不可见的成员方法(注意调用时需要给定两个参数,方法名以及方法参数,输出的便会是不存在的方法名以及以数组形式输出的方法参数)
__get() 访问私有属性private、以及不存在的属性时被调用
__set() __set( $property, $value )` 方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。
toString() 当使用echo或者print输出对象时,将对象转化成字符串
__callStatic() 当调用的静态方法不存在或权限不足时自动触发该方法
__autoload() 能够自动实例化需要使用的类,当程序要用到一个类,但该类还没有被实例化时,利用该方法便能自动查找和该类名称相同的文件
__isset() 用于检测变量是否存在,如果存在则返回true,否则返回false,用处便是为了对共有的成员属性进行检测,但不对私有的成员属性进行检测
__unset() 用于删除指定的变量,unset()函数可以对公有的成员属性进行删除操作,但是对于私有的成员属性还需依靠__unset()进行删除
__invoke() 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

CTF Web题部分PHP魔术方法总结(Magic Methods)_ctf中web的php解题方法-CSDN博客