• PHP之__destruct()


    __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:析构方法不是销毁对象本身的,而是用来关闭资源连接的。
  • 相关阅读:
    堆排序算法
    归并排序的递归算法与非递归
    二叉排序树(BST)的建立
    枚举排列的两种常见方法
    UVa 439骑士的移动(BFS)
    UVa 二叉树重建(先序+中序求后序)
    UVa 四叉树
    UVa 10562看图写树(二叉树遍历)
    JDBC(6)事务处理&批量处理
    JDBC(5)ResSetMetaData&DatabaseMetaData&获取数据库主键的值
  • 原文地址:https://www.cnblogs.com/sharecorner/p/6119652.html
Copyright © 2020-2023  润新知