<?php
class Person{
public $name;
public $age;
public $sex;
public function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
public function speek(){
echo "my name is ".$this->name;
}
public function __destruct(){
echo "goodby ".$this->name."<br/>";
}
}
$per1=new Person("tony",22,"male");
$per2=new Person("mary",22,"female");
$per3=new Person("jack",22,"male");
?>
输出结果:
goodby jack
goodby mary
goodby tony
为什么先创建的对象调用析构方法更晚呢?
在PHP中,只要使用一次new关键字就会实例化一个对象,并在堆内存里开辟一块自己的空间,并且在每个空间中都存有该类中声明的成员。但是对象的引用都是存放在
栈内存中的,由于栈的后进先出的特点,最后创建的对象引用会被最先释放。
如果是这样又会如何输出呢?
<?php
class Person{
public $name;
public $age;
public $sex;
public function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
public function speek(){
echo "my name is ".$this->name;
}
public function __destruct(){
echo "goodby ".$this->name."<br/>";
}
}
$per1=new Person("tony",22,"male");
$per1=null;
$per2=new Person("mary",22,"female");
$per3=new Person("jack",22,"male");
输出结果是:
goodby tony
goodby jack
goodby mary
虽然$per1是最先创建的,但是创建后就被赋予了空值,所以第一个对象最先失去引用,从而最先调用析构方法。