文章出處
文章列表
首先創建一個類,然后加入方法,并使用構造函數和析構函數
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
是在一起被析構函數析構的。
文章列表
全站熱搜