PHP8中的魔術(shù)方法-PHP8知識(shí)詳解
導(dǎo)讀:在PHP 8中,魔術(shù)方法是一種特殊的方法,它們以兩個(gè)下劃線(__)開(kāi)頭。魔術(shù)方法允許您定義類(lèi)的行為,例如創(chuàng)建對(duì)象、調(diào)用其他方法或訪問(wèn)和修改類(lèi)的屬性。
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
在PHP 8中,魔術(shù)方法是一種特殊的方法,它們以兩個(gè)下劃線(__)開(kāi)頭。魔術(shù)方法允許您定義類(lèi)的行為,例如創(chuàng)建對(duì)象、調(diào)用其他方法或訪問(wèn)和修改類(lèi)的屬性。以下是一些常見(jiàn)的魔術(shù)方法:
__construct(): 類(lèi)的構(gòu)造函數(shù)。當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí)自動(dòng)調(diào)用。
__destruct(): 類(lèi)的析構(gòu)函數(shù)。當(dāng)一個(gè)對(duì)象被銷(xiāo)毀時(shí)自動(dòng)調(diào)用。
__get($name): 在讀取一個(gè)不可訪問(wèn)屬性的值時(shí)自動(dòng)調(diào)用。
__set($name, $value): 在給一個(gè)不可訪問(wèn)屬性賦值時(shí)自動(dòng)調(diào)用。
__isset($name): 在對(duì)不可訪問(wèn)屬性調(diào)用 isset() 或 empty() 函數(shù)時(shí)自動(dòng)調(diào)用。
__unset($name): 在對(duì)不可訪問(wèn)屬性調(diào)用 unset() 函數(shù)時(shí)自動(dòng)調(diào)用。
__call($name, $arguments): 在調(diào)用一個(gè)不存在或不可訪問(wèn)的方法時(shí)自動(dòng)調(diào)用。
__callstatic($name, $arguments): 在調(diào)用一個(gè)不存在或不可訪問(wèn)的靜態(tài)方法時(shí)自動(dòng)調(diào)用。
__toString(): 在將對(duì)象作為字符串輸出時(shí)自動(dòng)調(diào)用。
__invoke($arguments): 當(dāng)嘗試將對(duì)象作為函數(shù)調(diào)用時(shí)自動(dòng)調(diào)用。
__clone(): 當(dāng)對(duì)象被克隆時(shí)自動(dòng)調(diào)用。
__debugInfo(): 在使用 var_dump() 函數(shù)輸出對(duì)象信息時(shí)自動(dòng)調(diào)用。
__serialize(): 在對(duì)象被序列化時(shí)自動(dòng)調(diào)用。
__unserialize($data): 在對(duì)象被反序列化時(shí)自動(dòng)調(diào)用。
__sleep(): 在對(duì)象被序列化時(shí)自動(dòng)調(diào)用,返回要序列化的屬性列表。
__wakeup(): 在對(duì)象被反序列化時(shí)自動(dòng)調(diào)用。
因?yàn)?a href="http://003188.cn/tag/php8/" data-type="mip" data-title="php8" target="_blank" title="php8">php8有眾多的魔術(shù)方法,本文也不會(huì)一一詳細(xì)說(shuō)明了,本文以__set()和__get()方法來(lái)詳細(xì)講解。
由于封裝性,所以可以使用__get 和__set 方法來(lái)達(dá)到此目的。無(wú)論何時(shí),類(lèi)屬性被訪問(wèn)和操作時(shí),訪問(wèn)方法都會(huì)被激發(fā)。通過(guò)使用它們,可以避免直接對(duì)類(lèi)屬性進(jìn)行訪問(wèn)。
(1)當(dāng)程序試圖寫(xiě)入一個(gè)沒(méi)有定義或不可見(jiàn)的成員變量時(shí),PHP就會(huì)執(zhí)行__set()方法。該方法包含兩個(gè)參數(shù),分別表示變量名稱和變量值。
(2) 當(dāng)程序調(diào)用一個(gè)沒(méi)有定義或不可見(jiàn)的成員變量時(shí),PHP就會(huì)執(zhí)行__get()方法來(lái)讀取變量值。該方法包含一個(gè)參數(shù),表示要調(diào)用變量的名稱。
使用__set()和__get()方法,參考代碼:
<?php
class Fruit{
function __set($names,$value){
$this->$names = $value;
}
function __get($names){
return $this->$names;
}
};
$a = new Fruit ();
$a->name = "梨子";
$a->price = "3.88元";
echo $a->name."的價(jià)格為:".$a->price."<br />";
$b = new Fruit();
$b->name = "火龍果";
$b->num="666公斤";
$b->price= "4.88元";
echo $b->name."的庫(kù)存為:".$b->num.",價(jià)格為: ".$b->price."<br />";
?>
以上代碼在PHP8中的運(yùn)行結(jié)果如下:
梨子的價(jià)格為:3.88元
火龍果的庫(kù)存為:666公斤,價(jià)格為: 4.88元
上面代碼中,變量name、price、num都是沒(méi)有定義成員變量,所以此時(shí)會(huì)調(diào)用__set()和__get()方法。
本文地址:http://003188.cn/php8zhongdemoshufangfa.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡