PHP构造函数和析构函数的用法(新手必看)
PHP 程序创建类的实例(对象)时,需要调用构造函数进行对象的初始化工作,如果没有定义构造函数,则使用默认的无参数构造函数。
下面的代码在 /index.php 文件中测试这个构造函数的使用:
本例中,$auto1 对象创建时并没有指定参数,doors 属性使用默认值 4;$auto2 对象创建时指定参数为 2,doors 属性的值设置为 2。
PHP 的类中,只能定义一个构造函数,一方面,如果需要创建多个版本的对象,可以组织好 __construct() 方法的参数,并设置合理的默认值;另一方面,可以使用静态方法创建不同版本的对象,在软件开发中,这类静态方法称为“工厂方法”。
与构造函数相对应的是析构函数,可以完成对象释放时的清理工作。
PHP构造函数
实际开发中,可以根据需要定义自己的构造函数。下面的代码在 tAuto 类中添加了一个构造函数(/demo/tAuto.php)。<?php class tAuto { // 构造函数 public function __construct($doors=4) { $this->setDoors($doors); } // public $model; private $doors; // public function setDoors($doors) { if($doors>=0 && $doors<=5) $this->doors = $doors; else $this->doors = 4; } public function getDoors() { return $this->doors; } // public function drive() { echo $this->model," 行驶中 ..."; } } ?>在 PHP 的类中,使用 __construct() 函数定义类的构造函数。本例的构造函数定义了一个参数,用于指定车门数量,并指定默认为 4。
下面的代码在 /index.php 文件中测试这个构造函数的使用:
<?php require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php"; $auto1 = new tAuto(); echo $auto1->getDoors(),"<br>"; $auto2 = new tAuto(2); echo $auto2->getDoors(); ?>代码执行后会显示 4 和 2。
本例中,$auto1 对象创建时并没有指定参数,doors 属性使用默认值 4;$auto2 对象创建时指定参数为 2,doors 属性的值设置为 2。
PHP 的类中,只能定义一个构造函数,一方面,如果需要创建多个版本的对象,可以组织好 __construct() 方法的参数,并设置合理的默认值;另一方面,可以使用静态方法创建不同版本的对象,在软件开发中,这类静态方法称为“工厂方法”。
与构造函数相对应的是析构函数,可以完成对象释放时的清理工作。
PHP析构函数
在 PHP 的类中,使用 __destruct() 函数定义析构函数,对象释放时会自动调用,如下面的代码(/demo/tAuto.php)。<?php class tAuto { // 构造函数 public function __construct($doors=4) { $this->doors = $doors; } // 析构函数 public function __destruct() { echo "车辆报废了..."; } // // 其他代码... } ?>下面的代码在 /index.php 文件中进行测试:
<?php require_once $_SERVER["DOCUMENT_ROOT"]."/demo/tAuto.php"; $auto = new tAuto(); ?>代码执行结果为:
车辆报废了...
可以看到,代码中并没有显式调用析构函数,但它的确执行了。