本篇內(nèi)容主要講解“php的魔術(shù)方法詳解”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“php的魔術(shù)方法詳解”吧!
為企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)站優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站、競(jìng)價(jià)托管、品牌運(yùn)營(yíng)等營(yíng)銷(xiāo)獲客服務(wù)。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡(luò)營(yíng)銷(xiāo)運(yùn)營(yíng)團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營(yíng)銷(xiāo)經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營(yíng)銷(xiāo)獲客難題,做到“讓獲客更簡(jiǎn)單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營(yíng)銷(xiāo)”三大難題,同時(shí)降低了營(yíng)銷(xiāo)成本,提高了有效客戶(hù)轉(zhuǎn)化率,獲得了眾多企業(yè)客戶(hù)的高度認(rèn)可!從PHP 5以后的版本,PHP中的類(lèi)就可以使用魔術(shù)方法了。其規(guī)定以?xún)蓚€(gè)下劃線(xiàn)(__)開(kāi)頭的方法都保留為魔術(shù)方法,所以建議大家函數(shù)名好不用__開(kāi)頭,除非是為了重載已有的魔術(shù)方法。PHP 將所有以 _ _(兩個(gè)下劃線(xiàn))開(kāi)頭的類(lèi)方法保留為魔術(shù)方法。
__toString() 和__invoke()
public string __toString ( void ):當(dāng)對(duì)象被當(dāng)做string使用時(shí),這個(gè)方法會(huì)被自動(dòng)調(diào)用。此方法必須返回一個(gè)字符串
復(fù)制代碼 代碼如下:
class Magic{
public function __tostring(){
return "hello world!";
}
}
$obj = new Magic();
echo $obj;//hello world!
?>
__invoke():當(dāng)對(duì)象被當(dāng)成方法調(diào)用時(shí),這個(gè)方法會(huì)被自動(dòng)調(diào)用。
復(fù)制代碼 代碼如下:
class Magic{
public function __tostring(){
return "hello world!";
}
public function __invoke($x){
echo "__invoke called with param ".$x."\n";
}
}
$obj = new Magic();
$obj(10);//__invoke called with param 10
?>
__call()和__callStatic()
__call():當(dāng)對(duì)象訪問(wèn)不存在的方法名稱(chēng)時(shí),__call()方法會(huì)被自動(dòng)調(diào)用
__callStatic():當(dāng)對(duì)象訪問(wèn)不存在的靜態(tài)方法名稱(chēng)時(shí),__callStatic()方法會(huì)被自動(dòng)調(diào)用
通過(guò)這兩個(gè)方法,同一個(gè)方法的名稱(chēng)的調(diào)用可以對(duì)應(yīng)不同的方法實(shí)現(xiàn)
復(fù)制代碼 代碼如下:
class Magic{
//`$name` 參數(shù)是要調(diào)用的方法名稱(chēng)。`$arguments` 參數(shù)是一個(gè)枚舉數(shù)組,
//包含著要傳遞給方法 `$name` 的參數(shù)。
public function __call($name,$arguments){
//implode() 函數(shù)把數(shù)組元素組合為一個(gè)字符串。implode(separator,array)
echo "Calling " . $name ." with param: ".implode(", ",$arguments)."\n";
}
}
$obj = new Magic();
$obj->run("para1","para2");//obj去調(diào)用run方法,輸出:Calling run with param: para1, para2
?>
__get()和__set()
在給不可訪問(wèn)屬性賦值時(shí),__set()會(huì)被調(diào)用
讀取不可訪問(wèn)屬性的值時(shí),__get()會(huì)被調(diào)用
復(fù)制代碼 代碼如下:
class Magic{
//function 前要有static關(guān)鍵字
public function __get($name){
return "Getting the property " . $name;
}
}
$obj = new Magic();
echo $obj->className."\n";//Getting the property className
?>
讀取不可訪問(wèn)屬性的值時(shí),__get()會(huì)被調(diào)用
復(fù)制代碼 代碼如下:
class Magic{
public function __set($name,$value){
echo "Setting the property " . $name ."to value ". $value ."\n";
}
}
$obj = new Magic();
$obj->className = 'MagicClass';//Setting the property classNameto value MagicClass
?>
__isset()和__unset()
當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用isset()或empty()時(shí),__isset()會(huì)被調(diào)用
當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用unset()時(shí),__unset()會(huì)被調(diào)用
復(fù)制代碼 代碼如下:
class Magic{
public function __isset($name){
echo "__isset invoked\n";
return true;
}
}
$obj = new Magic();
echo '$obj->className is set?'.isset($obj->className)."\n";//__isset invoked $obj->className is set?1
?>
到此,相信大家對(duì)“php的魔術(shù)方法詳解”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!