zoukankan      html  css  js  c++  java
  • 构造函数和析构函数

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

     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

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

  • 相关阅读:
    第二百一十五节,jQuery EasyUI,DateBox(日期输入框)组件
    第二百一十四节,jQuery EasyUI,Calendar(日历)组件
    onethink 系统函数中 生成随机加密key
    本地开发 localhost链接数据库比127.0.0.1慢
    仿写thinkphp的I方法
    判断数组中有没有某个键 isset 和 array_key_exists 的效率比较
    jquery实时监听某个文本框的输入事件
    js数组去重
    thinkphp3.2.3 版本使用redis缓存的时候无法使用认证
    javascript中使用md5函数
  • 原文地址:https://www.cnblogs.com/jacson/p/4620246.html
Copyright © 2011-2022 走看看