PHP对象销毁方式

来源:互联网 发布:苹果6忽略网络怎么恢复 编辑:程序博客网 时间:2024/06/06 03:30

析构函数:对象销毁时执行;注意在隐式销毁中是在是所有php代码执行完最后一行代码的时候才销毁

对象的销毁

  1. 显试销毁: 当对象没有被引用时就会被销毁,所以我们可以unset或为其赋值NULL;
  2. 隐试销毁:PHP是脚本语言,在代码执行完最后一行时,所有申请的内存都要释放掉.
Example:

<?phpclass Human {     public $name = '张三';     public $gender = null;     public function __destruct() {         echo '走了!<br />';     }   }   $a = new Human();   $b = $c = $d = $a;  unset($a);    echo $b->name; //输出张三echo '<hr />'; //先输出换行线再输出走了    析构函数是在线上触发还是线下触发??>

答案:

$b =$c = $d = $a;默认引用传值,四个变量指向同一处内存,unset的时候对象还是被其它三个变量使用,所以对象并没有被销毁,所以析构函数是在线下触发的(代码执行完了,内存自动释放)

Example2:

<?phpclass Human {   public $name = '张三';   public $gender = null;      public function __destruct() {       echo '走了!<br />';   } } $e = $f = $g = new Human(); unset($e); unset($f); unset($g); echo '<hr />'; //同样的问题: 析构函数是在线上触发还是线下触发??>


在代码运行完自动释放内存之前由于对象已经没有被任何变量引用所以就自动释放了内存....答案是在线上触发