日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解

發布時間:2024/9/19 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

1.構造方法

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

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

function __construct( [參數列表] ){ //構造方法名稱是以兩個下劃線開始的

//方法體,通常用來對成員屬性進行初始化賦值

}

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

構造函數可以接受參數,能夠在創建對象時賦值給對象屬性

構造函數可以調用類方法或其他函數

構造函數可以調用其他類的構造函數

構造函數使用例子:

class 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()調用:

class 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的很類似,對沒有任何引用的對象進行銷毀回收,采用引用計數器的技術。

例子:

class test{

function __destruct(){

echo "當對象銷毀時會調用!!!";

}

}

$a = $b = $c = new test();

$a = null;

unset($b);

echo "


";

?>

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

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

class 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 . "
";

}

}

$person1 = new Person("張三三", "男", 23);

$person1 = null; //第一個對象將失去引用

$person2 = new Person("李四四", "女", 17);

$person3 = new Person("王五五", "男", 43);

?>

運行結果:

再見張三三

再見王五五

再見李四四

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

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

總結

以上是生活随笔為你收集整理的java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。