PHP8中的構(gòu)造方法和析構(gòu)方法-PHP8知識(shí)詳解
導(dǎo)讀:今日分享的內(nèi)容是PHP8中的構(gòu)造方法和析構(gòu)方法,我們把構(gòu)造方法和析構(gòu)方法這兩個(gè)方法分開(kāi)來(lái)講:
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線(xiàn)旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
今日分享的內(nèi)容是PHP8中的構(gòu)造方法和析構(gòu)方法,我們把構(gòu)造方法和析構(gòu)方法這兩個(gè)方法分開(kāi)來(lái)講:
1、構(gòu)造方法
構(gòu)造方法存在于每個(gè)聲明的類(lèi)中,主要作用是執(zhí)行一些初始化任務(wù)。如果類(lèi)中沒(méi)有直接聲明構(gòu)造方法,那么類(lèi)會(huì)默認(rèn)地生成一個(gè)沒(méi)有參數(shù)且內(nèi)存為空的構(gòu)造方法。
在php8中,構(gòu)造方法的方法名稱(chēng)必須是兩個(gè)下劃線(xiàn)開(kāi)頭的,即“__construct”。具體的語(yǔ)法格式如下:
function__construct([mixed args]){
//方法的內(nèi)容
}
一個(gè)類(lèi)只能聲明一個(gè)構(gòu)造方法。構(gòu)造方法中的參數(shù)是可選的,如果沒(méi)有傳入?yún)?shù),那么將使用默認(rèn)參數(shù)對(duì)成員變量進(jìn)行初始化。
定義一個(gè)構(gòu)造方法,參考代碼:
<?php
class Fruit {
public $name; //定義成員變量
public $num; //定義成員變量
public function __construct($name, $num) { //定義構(gòu)造方法
$this->name=$name; //調(diào)用本類(lèi)的成員變量
$this->num=$num; //調(diào)用本類(lèi)的成員變量
}
public function showFruit(){ //定義成員方法
if($this->num>300){
return $this->name."的庫(kù)存充足,不需要進(jìn)貨!";
}else{
return $this->name. "的庫(kù)存數(shù)量不多了,需要盡快進(jìn)貨!";
}
}
}
$f1=new Fruit ("橘子",600); //類(lèi)的實(shí)例化并傳遞參數(shù)
echo $f1->showFruit (); //調(diào)用方法
echo "<br />";
$f2=new Fruit ("柚子",100); //類(lèi)的實(shí)例化并傳遞參數(shù)
echo $f2->showFruit (); //調(diào)用方法
?>
以上代碼在PHP8中的顯示結(jié)果如下:
橘子的庫(kù)存充足,不需要進(jìn)貨!
柚子的庫(kù)存數(shù)量不多了,需要盡快進(jìn)貨!
由此可見(jiàn),構(gòu)造方法__construct()在實(shí)例化時(shí)會(huì)自動(dòng)執(zhí)行,通常對(duì)一些屬性進(jìn)行初始化,也就是對(duì)一些屬性進(jìn)行初始化的賦值。
要特別注意的是,構(gòu)造方法不能有返回值(return)。
2、析構(gòu)方法
析構(gòu)方法的作用和構(gòu)造方法正好相反。它是在對(duì)象被銷(xiāo)毀的時(shí)候被調(diào)用執(zhí)行的。但是因?yàn)镻HP求的終有資源釋放,所以析構(gòu)方法的意義是有限的。具體使用的語(yǔ)法格式如下:
function __destruct(){
//方法的內(nèi)容,通常是完成一些對(duì)象銷(xiāo)毀前的清理任務(wù)
}
PHP 8具有垃圾回收機(jī)制,可以自動(dòng)清除不再使用的對(duì)象,從而釋放更多的內(nèi)存。析構(gòu)方法是在垃圾回收程序執(zhí)行前被調(diào)用的方法,是 PHP 8編程中的可選內(nèi)容。
不過(guò),析構(gòu)方法在某些特定行為中還是有用的,比如在對(duì)象被銷(xiāo)毀時(shí)清空資源或者記錄日志信息。
以下兩種情況中,析構(gòu)方法可能被調(diào)用執(zhí)行。
(1)、代碼運(yùn)行時(shí),當(dāng)所有的對(duì)于某個(gè)對(duì)象的reference(引用)被毀掉的情況下。
(2)、當(dāng)代碼執(zhí)行到最終,并且 PHP8 停止請(qǐng)求的時(shí)候。
定義析構(gòu)方法參考代碼:
<?php
class Fruit {
public $name; //定義成員變量
public $num; //定義成員變量
public function __construct($name,$num){ //定義構(gòu)造方法
$this->name=$name; //調(diào)用本類(lèi)的成員變量
$this->num=$num; //調(diào)用本類(lèi)的成員變量
}
public function showFruit (){ //定義成員方法
if($this->num>600){
return $this->name."的庫(kù)存充足,不需要進(jìn)貨!";
}else{
return $this->name."的庫(kù)存數(shù)量不多了,需要盡快進(jìn)貨!";
}
}
public function __destruct(){ //定義析構(gòu)方法
echo "析構(gòu)函數(shù)被調(diào)用了,對(duì)象Fruit被銷(xiāo)毀了!<br />";
}
}
$f1=new Fruit("梨",800); //類(lèi)的實(shí)例化并傳遞參數(shù)
$f2=new Fruit("葡萄",100); //類(lèi)的實(shí)例化并傳遞參數(shù)
?>
以上代碼在PHP8中的運(yùn)行結(jié)果如下:
析構(gòu)函數(shù)被調(diào)用了,對(duì)象Fruit被銷(xiāo)毀了!
析構(gòu)函數(shù)被調(diào)用了,對(duì)象Fruit被銷(xiāo)毀了!
PHP8使用的是一種“社圾回收”機(jī)制,能夠自動(dòng)清除不再使用的對(duì)象并釋放內(nèi)存,也就是說(shuō)即使不使用unset()函數(shù),析構(gòu)方法也會(huì)被自動(dòng)調(diào)用,這里只是明確一下析構(gòu)方法在何時(shí)被調(diào)用。在一般情況下是不需要手動(dòng)創(chuàng)建析構(gòu)方法的。
到此為止,PHP8中的構(gòu)造方法和析構(gòu)方法這兩個(gè)知識(shí)點(diǎn)就講解完畢了。
本文地址:http://003188.cn/php8zhongdegouzaofangfahexigoufangfa.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡