析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。

析构函数

析构函数

GC

php析构函数的作用刚好和构造函数相反,构造函数是在对象实例化时自动执行,而析构函数在对象被销毁时自动执行。

当某个对象成为垃圾或者当对象被显式销毁时执行。

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。

默认情况下,php仅释放对象属性所占用的内存,并不销毁对象相关的资源,而利用析构函数在使用一个对象之后执行代码来清除内存,并将对象从内存中销毁。析构函数__destruct()结构形式如下:

PHP5中提供的析构函数是__destruct,其与构造方法__construct相对应。

这是PHP的GC垃圾处理机制,防止内存溢出。

 代码如下

垃圾回收——GC

当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。

 function __destruct(){
    /* class initialization code */
}

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾,PHP会将其在内存中销毁。

__destruct() 析构函数

析构函数是由系统自动调用,不能带参数。

这是PHP的GC垃圾处理机制,垃圾加收可以防止内存溢出。

__destruct() 析构函数,是在垃圾对象被回收时执行。

实例:

当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。

析构函数也可以被显式调用,但不要这样去做。

 代码如下

__destruct()析构函数,是在垃圾对象被回收时执行。

析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。

<?php
 class des{
  function __destruct(){
   echo “运行结束,执行析构函数”;
  }
 }
 $p=new des(); /* 实例化类 */
 $sum=0;
 for($i=0;$i<10;$i++){
  $sum=$sum+$i;
  echo $sum .”<br>”;
 }
?>

析构函数是由系统自动调用的,也可以被显式调用,但不要这样去做。

析构函数不能带有参数。

析构函数的调用

如下面程序所示,程序结束前,所有对象被销毁。析构函数被调用了。

如下面程序所示,程序结束前,所有对象被销毁。析构函数被调用了。 复制代码 代码如下: class Person { public
function __destruct(){ echo ‘析构函数现在执行了
‘; echo ‘这里一般用来设置、关闭数据库、关闭文件等收尾工作’; } } $p = new
Person(); for{ echo “$i
“; } ?> 程序运行结果: 0 1 2 3 4

php如何调用析构函数?当php脚本不再与对象相关时将调用析构函数。如果要明确地销毁一个对象调用析构函数,可以给指向对象的变量不分配任何值,通常将变量赋值为NULL或者用unset()函数。

'; echo '这里一般用来设置、关闭数据库、关闭文件等收尾工作'; }}$p = new Person();for{ echo "$i 
";}?>

析构函数现在执行了 这里一般用来设置、关闭数据库、关闭文件等收尾工作
当对象没有指向时,对象被销毁。 复制代码
代码如下: class Person { public function __destruct(){ echo
‘析构函数现在执行了
‘; } } $p = new Person(); $p = null; // 析构函数在这里执行了 $p = “abc”;
// 一样的效果 for{ echo “$i
“; } ?> 程序运行结果:

实例:

程序运行结果:0 1 2 3 4 析构函数现在执行了
这里一般用来设置、关闭数据库、关闭文件等收尾工作

析构函数现在执行了 0 1 2 3 4
上面的例子第10行,我们将$p设置为空或者第11行赋予$p一个字符串,这样$p之前指向的对象就成为了垃圾对象。PHP将这个对象垃圾销毁。
php unset变量 复制代码 代码如下: class
Person { public function __destruct(){ echo ‘析构函数现在执行了
‘; } } $p = new Person(); $p1 = $p; unset; echo ‘现在把 $p
被销毁了,对象是否也被销毁了呢?
‘; for{ echo “$i
“; } echo ‘现在再把 $p1 也销毁掉,即已经没有指向对象的变量了
‘; unset; // 现在没有指向对象的变量了,析构函数在这里执行了 ?>
程序运行结果:

 代码如下

当对象没有指向时,对象被销毁。

现在把 $p 被销毁了,对象是否也被销毁了呢? 0 1 2 3 4

<?php
 class des{
  function __destruct(){
   echo “对象被销毁,执行析构函数<br>”;
  }
 }
 $p=new des(); /* 实例化类 */
 echo “程序开始<br>”;
 unset($p); /* 销毁变量$p */
www.qy186.com, echo “程序结束”;
?>

'; }}$p = new Person();$p = null; // 析构函数在这里执行了$p = "abc"; // 一样的效果for{ echo "$i 
";}?>

现在再把 $p1 也销毁掉,即已经没有指向对象的变量了

构造函数

析构函数现在执行了 0 1 2 3 4

析构函数现在执行了 unset 销毁的是指向对象的变量,而不是这个对象。

我们在使用类的过程中,有时需要立即为实例化对象的多个字段父子,如果通过手工,会带来很多不可预测的问题,而如果在对象创建过程中自动执行,则会带来很多方便。

上面的例子中,我们将$p设置为空或者赋予$p一个字符串,这样$p之前指向的对象就成为了垃圾对象。PHP将这个对象垃圾销毁。

php构造函数作用就是当类被实例化时,会自动执行的函数,又称为构造函数。

php unset变量

构造函数的声明和其它函数一样,知识构造函数的名称是“__construct”固定的名称,其结构形式如下:

'; }}$p = new Person;echo '现在把 $p 被销毁了,对象是否也被销毁了呢? 
';for{ echo "$i 
";}echo '现在再把 $p1 也销毁掉,即已经没有指向对象的变量了
';unset; // 现在没有指向对象的变量了,析构函数在这里执行了?>

 代码如下

现在把 $p 被销毁了,对象是否也被销毁了呢?0 1 2 3 4 现在再把 $p1
也销毁掉,即已经没有指向对象的变量了析构函数现在执行了

function __construct([argument1,argument2,argument3]){
    /* class initialization code */
}

unset 销毁的是指向对象的变量,而不是这个对象。

实例:

总结

 代码如下

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

<?php
 class user{
  public $name;
  private $password;
  private $login;
  public function __construct($name,$password){
   $this->name=$name;
   $this->password=$password;
   $this->login=time();
  }
  function getlogin(){
   return(date(‘M d,Y’,$this->login));
  }
 }
 $user=new user(‘Marry’,’888888′);
 echo “用户名: “. $user->name. “<br>”;
 print(“访问时间”. $user->getlogin());
?>

调用父类构造函数

构造函数可以被子类调用,php调用父类构造函数时必须使用parent关键字,否则不会自动调用。

实例:

 代码如下

<?php
 class task1{
  public function __construct(){
   echo “today is Monday”. “<br>”;
  }
 }
 class task2 extends task1{
  function __construct(){
   parent::__construct(); /* 调用父类构造函数 */
   echo “I must work!”;
  }
 }
 new task2;
?>

相关文章