__destruct()
当对象被销毁时候,系统内部会自动调用该方法。
分三类:
1.当php代码 声明周期执行完毕结束后; 会自动调用该方法
2.当对象被unset()后 ;系统会自动调用该方法
3.当对象被重新赋值后 ;系统会自动调用该方法
1 class Test{ 2 3 public function __destruct(){ 4 5 echo "对象被销毁之后,执行的代码"; 6 } 7 } 8 9 $test = new Test(); 10 11 unset($test); 12 13 $test = 'aaaa'; 14 15 析构函数的作用是干嘛的: 16 就是当一些创建资源对象在运行完毕之后需要关闭连接 而执行的代码段 17 mysql数据连接完毕之后需要关闭连接 18 fopen()打开文件句柄 执行完毕之后关闭 19 session 会话结束之后 销毁session ,destroy() 20 21 22 23 析构函数的作用: 24 保证数据持久化 更新。 25 每个对象,都对应数据库中的表的每条记录。 26 27 create table student( 28 sid int unsigned primary key auto_increment, 29 name varchar(32) not null, 30 gender nuem('male','female') not null 31 ) 32 33 34 class Student { 35 public $sid; 36 public $name; 37 public $gender; 38 39 public function __construct($sid){ //创建对象的时候 40 $sql = "select sid,name,gender from student where sid = $sid "; 41 } 42 43 public function save(){ //数据更新之后需要进行保存,,是每次更新完毕之后要进行保存的。 44 $sql = "update student set name= $this->name, gender=$this->gender where sid =$sid "; 45 } 46 47 public function __destruct(){ //当每次更新学生信息之后需要同步到数据库中的操作 48 $this->save(); 49 } 50 } 51 52 $s = new Student(); 53 $s ->name = 'xujin'; 54 $s ->save(); //因为每次更新数据 都需要进行数据库的同步更新 所以每次都需要调用该函数。 如果 把该函数放在析构函数中 当每次php代码段执行完毕之后 会自动调用保存 更新操作 实施数据的同步更新 以及数据的可持久化。 55 56 ------------------------------------------------------------------------------------------------------------------------------------------- 57 class Test{ 58 59 public $db_url='localhost:3306'; 60 public $db_user='root'; 61 public $db_pwd = 'root'; 62 63 public function __construct(){ 64 $link = mysql_connect($db_url, $db_user, $db_pwd); //连接数据库操作 65 } 66 67 public function __destruct(){ 68 mysql_close($link); //关闭这个连接资源 而不是销毁这个对象 当销毁对象触发时 系统会自动调用 析构函数来执行 关闭资源这个连接。 69 } 70 } 71 72 $dao = new Test(); 73 unset($dao); tips:当对象被unset之后 对象确实被销毁啦,但是 mysql的连接资源依然存在 还可以执行sql语句 74 75 $sql = "show databases"; 76 $result = mysql_query($sql); //结果有返回值 说明 销毁对象 之后 资源连接 依然存在 77 78 79 ------------------------------------------------------------------------------------------------------------------------------------------ 80 tips:析构方法不是销毁对象本身的,而是用来关闭资源连接的。