PHP中常用的魔术方法
__wakeup
执行unserialize()时,先会调用这个函数
unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
如何绕过wakeup函数:只要反序列化时对象参数大于原参数数量即可绕过,例如
1 | 我们只需要把对象原来属性值比原来的大就行我们把1改成2 |
__destruct
这是析构函数,脚本运行结束之前会调用对象的析构函数
__construct
这是构造函数,当使用 new 关键字实例化一个对象时,构造函数将会自动调用
__toString
将当前类的类名当作变量时自动调用
此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。
- 对一个对象进行echo操作或者print操作会触发__toString;
- 声明的变量赋值为对象后与字符串做弱类型比较的时候就能触发__toString;
- 声明的变量赋值为对象后进行正则匹配的时候就能触发__toString;
- 声明的变量被赋值为对象后进行strolower的时候就能触发__toString;
__call
在对象中调用一个不存在的方法时自动调用
当程序发现对象没有定义某个方法时,就会尝试调用名为__call的方法,如果对象中有__call方法,则会调用__call方法,把不存在的方法名和参数,以数组的形式传递给__call方法。
__get
访问类中的私有成员时,如果定义了此方法,自动调用
1 |
|
__set
给一个未定义的属性赋值时,此方法会被触发
传递的参数是被设置的属性名和值。
__invoke
调用对象名当方法使用时,自动调用
实例:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 keyblue's blog!
评论
