PHP魔术方法
概念
- 魔术方法,PHP将所有以两个下划线开头的类方法保留为魔术方法(魔术方法即为一个特殊的类方法)
- 魔术常量,PHP向他运行的任何脚本提供了大量的预定义变量
__wakeup()
__wakeup(),执行unserialize()时,会先调用这个函数
当在类的外部调用unserialize()时,会先检查在类的内部是否存在一个__wakeup()方法,如果存在,则会先调用__wakeup方法,预先准备对象需要的资源
__wakeup()常用于反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作
代码语言:javascript复制public funcion __wakeup(){
$this -> connect();
}
__sleep()
当对一个对象序列化时,php就会调用__sleep()方法 (如果存在的话)
和__wakeup()相对,一正一反,__sleep是序列化时自动调用,__wakeup是在反序列化时自动调用
__sleep方法可以用于清理对象,并且返回一个包含对象中所有变量名称的数组,常用于提交未提交的数据,或类似的清理操作
代码语言:javascript复制public funcion __sleep(){
return array('server','username','password','db');
}
__construct()
__construct()函数用于创建一个新的simpleXMLelement对象
__construct():构造方法,在类的实例化的时候,会自动调用该魔术方法,进行类的实例化
子类继承父类时__construct()的用法
代码语言:javascript复制1. 自己没有,会自动去父类中找
2. 自己有,自己初始化时会触发自己的__construct方法进行初始化操作
3. 如果有,还想调用父类中的__construct()方法,语法: parent::__construct
__construct和__destruct相对,__construct构建对象的时候被调用,__destruct明确销毁对象或脚本结束时被调用
invoke()
当尝试以调用函数的方式调用一个对象时,__invoke()方法会被自动调用,但是如果没有显式地在实例化对象的后面加上参数的话就不会自动调用,类似于
即在实例化后的类中直接写参数,即为调用函数的方式调用一个对象
代码语言:javascript复制class abc{
public function __invoke($x){
var_dump($x);
}
}
$obj = new abc;
$obj(10); // 即在实例化后的对象中直接加参数,会默认调用类中的__invoke()
/*
将会输出int 10
*/