亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP面向對象程序設計之構造方法和析構方法詳解

2024-05-05 00:09:35
字體:
來源:轉載
供稿:網友

本文實例講述了PHP面向對象程序設計之構造方法和析構方法。分享給大家供大家參考,具體如下:

構造方法和析構方法是對象中的兩個特殊方法,它們都與對象的生命周期有關。構造方法是對象創建完成后第一個被對象自動調用的方法,這是我們在對象中使用構造方法的原因。而析構方法是對象在銷毀之前最后一個被對象自動調用的方法,這也是我們在對象中使用析構方法的原因。所以通常使用構造方法完成一些對象的初始化工作,使用析構方法完成一些對象在銷毀之前的清理工作。

1.構造方法

在每個聲明的類中都有一個唄稱為構造方法的特殊成員方法,如果沒有顯式的聲明它,類中都會默認存在一個沒有參數列表并且內容為空的構造方法。如果顯式的聲明它,則類中的默認構造方法將不會存在。當創建一個對象時,構造方法就會被自動調用一次,即每次使用關鍵詞new來實例化對象時都會自動調用構造方法,不能主動通過對象的引用調用構造方法。所以通常使用構造方法來執行一些有用的初始化任務,比如對成員屬性在創建對象時賦初值等。

在PHP5以前的版本中,構造方法的方法名稱必須與類名相同,這種方式在PHP 5中任然可以使用。但在PHP中很少聲明和類名同名的構造方法了,這樣做的好處是可以使構造函數獨立于類名,當類名發生變化時不需要更改相應的構造函數名稱。為了向下兼容,在創建對象時,如果一個類中沒有名為__construct()的構造方法,PHP將搜索與類名相同名的構造方法執行。在類中聲明構造方法的格式如下:

function __construct( [參數列表] ){ //構造方法名稱是以兩個下劃線開始的  //方法體,通常用來對成員屬性進行初始化賦值}

在PHP中,同一個類中只能聲明一個構造方法。原因是構造方法名稱是固定的,在PHP中不能聲明同名的兩個函數,所以也就沒有構造方法重載。但可以在聲明構造方法時使用默認參數,實現其他面向對象的編程語言中構造方法重載的功能。這樣在創建對象時,如果在構造方法中沒有傳入參數,則使用默認參數為成員屬性進行初始化。

  • 構造函數可以接受參數,能夠在創建對象時賦值給對象屬性
  • 構造函數可以調用類方法或其他函數
  • 構造函數可以調用其他類的構造函數

構造函數使用例子:

<?phpclass Person{  private $name;  private $age;  private $gender;  public function __construct($name,$age,$gender){    $this->setName($name);  //調用類方法    $this->age = $age;    $this->setGender($gender);  }  public function setName($name){    $this->name = $name;  }  // ... setter 方法}$person = new Person("yeoman",23,'男');?>

調用父類構造函數、調用無關類的構造函數:

function __construct(){  parent::__construct(); // 調用父類的構造函數必須顯示的使用parent調用父類構造函數  classname::__construct(); // 調用其他類的構造函數,classname是類名  //其他操作}

繼承和構造函數

PHP中的子類的構造函數不會主動調用父類的構造函數,要顯示的使用parent::__construct()調用:

<?phpclass Animal{  private $name;  function __construct($name){    $this->setName($name)    echo "動物類被創建!";  }  // ... 其他方法}class Birds extends Animal{  private $name;  private $leg;  function __construct($name,$leg){    parent::__construct($name); // 顯示調用    $this->setLeg($leg);    echo "鳥類被創建!";  }  // ... 其他方法}?>

如果涉及多層繼承,當調用parent::__construct()時,會沿著父類向上搜索,直到找到最合適的構造函數,例如:

// 接上例class Parrot extends Birds{  private $name;  private $leg;  private $wing;  function __construct($name){    parent::__construct($name); // 此時沒有找到父類(Birds類)合適的構造函數,只能向上搜索,搜索到Animal類時,才找到合適的構造函數    echo "鸚鵡類被創建!";    $this->smackTalk();    /*    輸出結果:    "動物類被創建!"    "鸚鵡說話!"    */  }  function smackTalk(){    echo "鸚鵡說話!";  }}

如果想要依次調用幾個父類的構造函數,可以使用類名直接調用構造函數,例如:

function __construct($name,$leg){    Animal::__construct($name); // 調用Animal構造函數    Birds::__construct($name,$leg); // 調用Birds構造函數}

2.析構函數

析構方法允許在銷毀一個對象之前執行一些特定的操作,例如關閉文件,釋放結果集等。

當堆內存段中的對象失去訪問它的引用時,它就不能被訪問了,也就成為垃圾對象了。通常對象的引用被賦予其他的值或者是在頁面運行結束時,對象都會失去引用。

析構函數是在銷毀對象時,自動調用的,不能顯式的調用。析構函數不能帶參數。

析構方法的聲明格式如下:

function __deconstruct(){  //方法體,通常用來完成一些在對象銷毀前的清理任務}

在以下幾種情況下可能會調用析構函數(但不一定):

  • PHP頁面加載完畢之后;
  • unset()類;
  • 變量引用指向別的對象或值時;
  • PHP的內存回收機制和JAVA的很類似,對沒有任何引用的對象進行銷毀回收,采用引用計數器的技術。

例子:

<?phpclass test{  function __destruct(){    echo "當對象銷毀時會調用?。。?quot;;  }}$a = $b = $c = new test();$a = null;unset($b);echo "<hr />";?>

此例子,如下圖,有三個變量引用$a,$b,$c指向test對象,test對象就有3個引用計數,當$a = null時,$a對test對象的引用丟失,計數-1,變為2,當$b被unset()時,$b對test對象的引用也丟失了,計數再-1,變為1,最后頁面加載完畢,$c指向test對象的引用自動被釋放,此時計數再-1,變為0,test對象已沒有變量引用,就會被銷毀,此時就會調用析構函數。

PHP,構造方法,析構方法

在PHP中析構方法并不是很常用,它屬于類中可選的一部分,只有需要時才在類中聲明。

<?phpclass Person{  var $name;  var $sex;  var $age;  function __construct($name, $sex, $age){    $this->name = $name;    $this->sex = $sex;    $this->age = $age;  }  function __destruct(){    echo "再見" . $this->name . "<br />";  }}$person1 = new Person("張三三", "男", 23);$person1 = null;  //第一個對象將失去引用$person2 = new Person("李四四", "女", 17);$person3 = new Person("王五五", "男", 43);?>

運行結果:

再見張三三
再見王五五
再見李四四

第一個對象在聲明完成以后,它的引用就被賦予了空值,所以第一個對象最先失去的引用,不能再被訪問了,人后自動調用第一個對象中的析構方法輸出“再見張三三”。后面聲明的兩個對象都是在頁面執行結束時失去的引用,也都自動調用了析構方法。但因為對象的引用都是放在棧內存中的,由于棧的后進先出特點,最后創建的對象會被最先釋放,多以先自動調用第三個對象的析構方法,最后才調用第二個對象的析構方法。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
疯狂欧美牲乱大交777| 久久在线免费观看视频| 欧美性猛交99久久久久99按摩| 午夜精品久久久久久99热软件| 亚洲免费av电影| 日韩在线免费视频| 色999日韩欧美国产| 国产亚洲精品一区二区| 日韩av电影手机在线观看| 国产在线观看精品一区二区三区| 久久久精品一区二区三区| 欧美成人黄色小视频| 91九色视频导航| 亚洲va码欧洲m码| 亚洲精品国产精品国自产在线| 红桃视频成人在线观看| 久久久av亚洲男天堂| 国产精品久久久久久久久久ktv| 精品国产一区二区三区在线观看| www.午夜精品| 性欧美在线看片a免费观看| 欧美巨猛xxxx猛交黑人97人| 亚洲国产精品久久| 色综合久久中文字幕综合网小说| 国产精品欧美一区二区三区奶水| 久久久久久999| 亚洲人成亚洲人成在线观看| 欧美日韩激情视频8区| 操人视频在线观看欧美| 欧美性xxxx在线播放| 欧美国产极速在线| 欧美日韩视频在线| 2018中文字幕一区二区三区| 中文字幕精品久久久久| 久久精品久久久久电影| 午夜精品在线观看| 亚洲欧洲一区二区三区在线观看| 国产精品夜间视频香蕉| 国产一区视频在线播放| 国产精品18久久久久久麻辣| 亚洲国产另类久久精品| 日韩欧美国产高清91| 日韩欧美成人精品| 日本一区二区在线播放| 欧美视频在线视频| 国产一区二区三区毛片| 国产欧美日韩专区发布| 国产精品成人免费视频| 91深夜福利视频| 日韩极品精品视频免费观看| 国产精品福利久久久| 中文字幕欧美亚洲| 欧美午夜精品久久久久久浪潮| 欧美日韩aaaa| 亚洲在线一区二区| 成人欧美一区二区三区在线| 亚洲欧洲偷拍精品| 51精品国产黑色丝袜高跟鞋| 国内精品久久久久久影视8| 91久久国产婷婷一区二区| 国产成人综合一区二区三区| 亚洲春色另类小说| 色噜噜国产精品视频一区二区| 欧美精品久久久久久久久| 亲子乱一区二区三区电影| 欧美亚洲在线播放| 欧美一级片久久久久久久| 视频在线观看99| 欧美成人国产va精品日本一级| 亚洲成人黄色在线| 日韩福利在线播放| 日韩美女福利视频| 精品久久久久久久久久国产| 日韩精品极品毛片系列视频| 69av视频在线播放| 高跟丝袜欧美一区| 欧美日韩成人在线观看| 国产做受69高潮| 精品国产91乱高清在线观看| 91国产精品91| 欧美日韩另类在线| 日本精品一区二区三区在线| 亚洲电影免费观看高清完整版| 日本亚洲欧美三级| 亚洲天堂色网站| 91av在线播放| 最近2019中文字幕mv免费看| 国产精品久久久| 97超级碰碰人国产在线观看| 91香蕉嫩草神马影院在线观看| 欧美精品做受xxx性少妇| 91精品久久久久久久久久久久久久| 亚洲国产成人在线视频| 91精品久久久久久久久久入口| 亚洲成人激情视频| 欧美电影免费观看高清完整| 成人妇女淫片aaaa视频| 日本午夜在线亚洲.国产| 亚洲高清久久久久久| 国产欧美在线观看| 亚洲欧美中文日韩在线v日本| 97久久伊人激情网| 亚洲图片欧美午夜| 日韩一区二区欧美| 久久久国产一区二区三区| 国产ts人妖一区二区三区| 欧美wwwwww| 在线电影中文日韩| 精品在线欧美视频| 中文字幕国产精品| 国产在线a不卡| 欧美电影院免费观看| 性金发美女69hd大尺寸| 国产精品毛片a∨一区二区三区|国| 国产精品一区二区女厕厕| 中文字幕日韩av| 国产欧美日韩中文字幕| 欧美日韩中国免费专区在线看| 色综合影院在线| 亚洲色图av在线| 久久久精品网站| 国产精品久久久久久久久久久新郎| 奇米四色中文综合久久| 亚洲free性xxxx护士白浆| 激情久久av一区av二区av三区| 亚洲综合精品伊人久久| 国产精品露脸av在线| 在线电影欧美日韩一区二区私密| 亚洲最大av网站| 国产精品久久久久久超碰| 精品久久久国产| 国产欧美一区二区三区久久| 538国产精品一区二区在线| 日韩中文字幕在线免费观看| 亚洲人成人99网站| 成人天堂噜噜噜| 国产成人精品免高潮费视频| 亚洲午夜未满十八勿入免费观看全集| 97国产suv精品一区二区62| 中文字幕精品—区二区| 亚洲欧美精品一区二区| 亚洲www在线| 色综合久久88| 久国内精品在线| 国产精品第100页| 国产成人免费91av在线| 国产精品欧美在线| 成人a在线观看| 国产精品久久久久久久天堂| 欧美成人自拍视频| 成人亚洲欧美一区二区三区| 亚洲第一偷拍网| 热草久综合在线| 欧美激情视频在线观看| 日韩中文字幕第一页| 亚洲天堂第二页| 91精品国产色综合久久不卡98| 国产欧美一区二区三区久久| 国产精品久久久久久搜索| 亚洲高清免费观看高清完整版| 亚洲国产精品一区二区久| 一本大道香蕉久在线播放29| 国产一区二区三区四区福利| 精品久久久国产|