构造函数和析构函数

首先创建一个类,然后加入方法,并使用构造函数和析构函数

 1 <?php
 2 
 3 class NbaPlayer {
 4     public $name="Jordan";
 5     public $height="198cm";
 6     public $weight="98kg";
 7     public $team="Bull";
 8     public $playerNumber="23";
 9 
10     //构造函数,在对象被实例化的时候自动调用
11     function __construct($name,$height,$weight,$team,$playerNumber) {
12         echo "In NbaPlayer constructor"."<br/>";
13         $this->name = $name;  //$this 是php里面的伪变量,表示对象自身,可以通过$this->的方式访问对象的属性和方法
14         $this->height = $height;
15         $this->weight = $weight;
16         $this->team = $team;
17         $this->playerNumber = $playerNumber;
18     }
19 
20     //析构函数,程序执行结束的时候自动调用,不需要new
21     //析构函数通常被用于清理程序使用的资源,比如程序使用了打印机,那么可以在析构函数里面释放打印机资源
22     function __destruct() {
23         echo "Destroying".$this->name."<br/>";
24     }
25 
26     //方法定义
27     public function run() {
28         echo "Running"."<br/>";
29     }
30 
31     public function jump() {
32         echo "Jumping"."<br/>";
33     }
34     public function dribble() {
35         echo "Dribbling"."<br/>";
36     }
37     public function shoot() {
38         echo "shooting"."<br/>";
39     }
40     public function dunk() {
41         echo "Dunking"."<br/>";
42     }
43     public function pass() {
44         echo "passing"."<br/>";
45     }
46 }
47 
48 $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
49 echo $jordan->name."<br/>";
50 $jordan->dribble();
51 $jordan->pass();
52 
53 $james = new NbaPlayer("James","203cm","120kg","Heat","6");
54 echo $james->name."<br/>";
55 //通过把变量设置为null,可以触发析构函数的调用
56 $james1= $james; 
57 $james2=&$james;//加&符号表示与$james是同一个引用,没有创建新的引用
58 $james2 = null;//要把所有的引用函数设为null,才能够使该函数使用析构函数
59 $james1 = null;
60 echo "from now on James will not be used"."<br/>";

结果为:

1 In NbaPlayer constructor
2 Jordan
3 Dribbling
4 passing
5 In NbaPlayer constructor
6 James
7 DestroyingJames
8 from now on James will not be used
9 DestroyingJordan

此时因为 Jordan 函数没有设置为null,故在最后是因为析构函数自动执行,所以 DestroyingJordan 了,

如果引用james函数时只设置了 $james1 = null; ,而$james2没有设置为null,那么到最后james最后被析构是因为被析构函数析构了,而不是设置为null的时候析构了。

原因是要把所有的引用函数设为null,才能够使该函数使用析构函数。

引用函数没有全部设置为null时,程序的输出结果:

1 In NbaPlayer constructor
2 Jordan
3 Dribbling
4 passing
5 In NbaPlayer constructor
6 James
7 from now on James will not be used
8 DestroyingJames
9 DestroyingJordan

这时

1 DestroyingJames
2 DestroyingJordan

是在一起被析构函数析构的。

原文地址:https://www.cnblogs.com/jacson/p/4620246.html