构造函数和析构函数
首先创建一个类,然后加入方法,并使用构造函数和析构函数
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
是在一起被析构函数析构的。