文章出處

首先創建一個類,然后加入方法,并使用構造函數和析構函數

 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

是在一起被析構函數析構的。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()