本文对一些php中的魔术方法进行总结,魔术方法顾名思义就是具备神奇功能的方法(function)。魔术方法通常在某些特定情况下自动触发,不能用实例化变量名->方法名()来主动触发。不同的魔术方法有不同的触发情况,魔术方法都以”__”两个下划线开头,一定要注意是“两个下划线”,如果写成一个下划线,不报错,但也不会被触发。
1.构造方法 __construct(参数){ }
该魔术方法,在实例化类时自动触发,不能主动触发。一般用于执行某些初始化任务,在一个类中,只能声明一个构造方法,下面我们用构造方法赋初始值。
class Person{ var $name; var $age; var $sex; //构造方法 function __construct($name,$age,$sex) { //赋值 $this->name = $name; $this->age = $age; $this->sex = $sex; } function say() { echo "My name is ".$this->name.". I am ".$this->age." years old.".$this->sex." in sex."; } } //在实例化时传入参数 执行构造方法 $obj = new Person("ZhangSan","20","male"); //再调用say()方法 $obj->say();
最后的输出结果是:My name is ZhangSan. I am 20 years old.male in sex.
从上面的例子可以看出,构造方法在类被实例化时主动触发,并可以传入参数。
以下几种情况适合放在构造方法内:
①数据库类
使用数据库之前,必须先连接数据库。我们可以将连接数据库
的代码放在构造方法里。
②分页类
每次计算分页之前,必须获取当前页数、计算总页数
,就可以放在构造方法里。
③上传类
必须先获取上传的文件 $file = $_FILES['form_name']
,它就可以放在构造方法里。
④绘图类
必须先创造一个画板,这个过程也可以放在构造方法。
2.析构方法 __destruct( ){ }
析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件, 释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显示销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似, 一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。
下面我们来看一下析构函数的具体应用:
class Student{ function say() { echo "I am a student. "; } //析构方法 function __destruct() { echo "I am so happy."; } } //实例化类 $obj_s = new Student(); //调用say()方法 $obj_s->say();
最后的输出结果是:I am a student. I am so happy.
可以看到,我们并没有主动去调用析构方法,但却输出了析构方法的结果。是因为在调用类方法结束后会自动释放内存。在释放内存前,主动触发了析构函数。