构造方法
构造方法是对象创建完成后第一个被对象自动调用的方法,用来完成对象的初始化
在每个类中都会有一个构造方法,如果没有声明的话,类中会存在一个没有参数列表并且内容为空的构造方法。如果声明的话,默认的构造方法将被替代。
在PHP5以前的版本中,构造方法的名称要与类名相同,这种方法在PHP5中也能用。
<?php class Person{ var $name; var $age; var $sex; function __construct($name="",$age=23,$sex="Male"){ //给成员属性赋初值 $this->name = $name; //创建对象的时候,使用传入的$name参数为$this->name赋初值 $this->age = $age; //创建对象的时候,使用传入的$age参数为$this->age赋初值 $this->sex = $sex; //创建对象的时候,使用传入的$sex参数为$this->sex赋初值 } function Say(){ echo "My name is ".$this->name.",and my age is ".$this->age.",sex is ".$this->sex; echo "<br>"; } } $p1 = new Person("Tom"); $p2 = new Person("John",21); //有参数传入的时候会覆盖掉成员属性的初值 $p3 = new Person("Alex",25,"Female"); $p1->say(); $p2->say(); $p3->say(); ?>
运行结果
析构方法
析构方法是对象在销毁之前最后一个被对象自动调用的方法,用于对象被销毁的时候。
<?php class Person{ var $name; function __construct($name="",$age=23,$sex="Male"){ $this->name = $name; } function __destruct(){ echo $this->name." be killed."; echo "<br>"; } } $p1 = new Person("Tom"); $p1 = null; //赋予空值,让其失去引用 $p2 = new Person("John"); $p3 = new Person("Alex"); ?>
运行结果
可以看到语句输出的顺序不一样,第三个比第二个还早输出
第一个对象在声明完了之后被赋予了空值,最先失去引用,然后自动调用了析构函数
因为对象的引用都是放在栈内存中,由于栈的后进先出的特点,后创建的对象引用会被先释放,所以先调用第三个对象的析构方法,再调用第二个对象的析构方法