第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

關(guān)于PHP單例模式,有一點(diǎn)不明白,求指教!

關(guān)于PHP單例模式,有一點(diǎn)不明白,求指教!

慕虎7371278 2019-04-21 20:14:51
首先,我定義個(gè)類,實(shí)現(xiàn)單例模式:(這里是簡(jiǎn)單一寫,就是個(gè)最基本的單例)classDemo{publicstatic$instance;privatefunction__Construct(){//TODO}publicstaticfunctiongetInstance(){if(!self::$instance){self::$instance=newstatic();}returnself::$instance;}publicfunctioncall(){//其他方法}}下面有兩種方式實(shí)例化類:1.在需要用的地方$aa=Demo::getInstance();$bb=Demo::getInstance();$cc=Demo::getInstance();這樣調(diào)用肯定是沒問題的,一般情況也是這樣初始化。2.定義一個(gè)普通類,寫個(gè)函數(shù)初始化,保存在一個(gè)靜態(tài)變量,如下:類:classDemo{publicfunction__Construct(){//TODO}}函數(shù):functionget_obj(){static$obj;if($obj){return$obj;}else{$obj=newDemo;return$obj;}}在需要調(diào)用的地方這樣寫:$obj=get_obj();$obj->call();$obj2=get_obj();$obj2->call();$obj3=get_obj();$obj3=get_obj();這樣不是也只實(shí)例化一次這個(gè)類嗎?
查看完整描述

2 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

完善的單例應(yīng)該是這樣的
classFoobar{
staticprivate$instance;
//禁止外部newFoobar
privatefunction__construct(){
}
//禁止clone$foobar
privatefunction__clone(){
}
staticpublicfunctiongetInstance(){
retrunself::$instance
?:(self::$instance=newself);
}
}
如果還要考慮到繼承的話
classFoo{
staticprivate$instances=[];
protectedfunction__construct(){
}
finalprivatefunction__clone(){
}
finalstaticpublicfunctiongetInstance(){
$class=get_called_class();
if(!isset(self::$instances[$class])){
self::$instances[$class]=newstatic;
}
returnself::$instances[$class];
}
}
classBarextendsFoo{
}
$foo=Foo::getInstance();
$bar=Bar::getInstance();
get_obj()那種寫法,也可以達(dá)到目的,但無法禁止new和clone,也就無法做到真正的單例
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-21
  • 2 回答
  • 0 關(guān)注
  • 353 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)