html文檔總是靜態(tài)的正確嗎?
Html是純文本的標(biāo)記格式文件,說(shuō)它是靜態(tài)的是正確的。就算ASP/PHP是動(dòng)態(tài)的,也是腳本,被客戶(hù)端宣稱(chēng)是靜態(tài)的。服務(wù)器上沒(méi)有靜態(tài)文件。HTML本身不能改變內(nèi)容和外觀,只能通過(guò)JAVAscript/VBscript來(lái)改變,但不代表一切都可以改變。
php單例模式該如何實(shí)現(xiàn)?
PHP單例模式的實(shí)現(xiàn)
singl:補(bǔ)充了一個(gè)答案】。
————————————————
通用單例模式的實(shí)現(xiàn)
類(lèi)單例
{
私有靜態(tài)$實(shí)例
私有函數(shù)__construct(){}
finalprotectedfunction__clone(){}#不允許被覆蓋,將由子類(lèi)繼承。
公共靜態(tài)函數(shù)getInstanc::$instanceinstanc::$instanc::$instanc:調(diào)用私有singl::__construct()
$S1singl::getinstanc::getinstance()
var_dump($s1,$S2)#object(Singleton)#1(0){}object(Singleton)#1(0){}
#測(cè)試了兩個(gè)現(xiàn)實(shí)例子是同一個(gè)對(duì)象。
#測(cè)試克隆對(duì)象,它會(huì)給出一個(gè)錯(cuò)誤,表明應(yīng)用程序中實(shí)際上只有一個(gè)對(duì)象。
//$S2clon:呼叫受保護(hù)的singl::__clon:呼叫給privat::__construct()?調(diào)用了父類(lèi)的privat::__construct()。
#所以還是需要調(diào)用靜態(tài)方法來(lái)獲取實(shí)例。
$aa::getinstance()
var_dump($a)#object(Singleton)#1(0){}#有問(wèn)題,實(shí)例化后仍然是Singleton對(duì)象。
#Solution使用PHP動(dòng)態(tài)綁定,關(guān)鍵字static列出了除靜態(tài)方法外動(dòng)態(tài)綁定的特點(diǎn)。
有三個(gè)特點(diǎn)?
1)在非靜態(tài)環(huán)境下,被調(diào)用的類(lèi)是對(duì)象實(shí)例所屬的類(lèi)【代表這個(gè)實(shí)例】。
2)由于?$this-gt?將嘗試調(diào)用同一范圍內(nèi)的私有方法,而。static::?可能會(huì)給出不同結(jié)果。[$這可以在同一個(gè)作用域內(nèi)調(diào)用私有變量方法static,相當(dāng)于類(lèi)名,比如a::$instanc::函數(shù)或static::$instanc:?只要static調(diào)用的元素不在同一個(gè)類(lèi)中,private就會(huì)報(bào)錯(cuò)。
3)另一個(gè)區(qū)別是?static::?只能用于靜態(tài)屬性,不能用于方法[可以調(diào)用方法]
因此,最終單例模式可以寫(xiě)成如下格式。
應(yīng)該注意的是,對(duì)當(dāng)前類(lèi)的s::或__CLASS__靜態(tài)引用的使用取決于定義當(dāng)前方法的類(lèi)。
#定義一個(gè)抽象類(lèi)被其他類(lèi)繼承。
抽象類(lèi)單例
{
??受保護(hù)的靜態(tài)$instance//這必須受到保護(hù)。如果子類(lèi)要繼承第二個(gè)protected,它們只能被static調(diào)用。
??私有函數(shù)__construct(){}
??最終受保護(hù)的函數(shù)__clone(){}
???
??公共靜態(tài)函數(shù)getInstance()
??{
????如果(!static::$instanceinstanceofstatic){
??????static::$instancenewstatic()
????}
????返回static::$instanc::getinstanc::getinstance()
$cb::getinstanc::getinstanc::getin站姿()
var_dump($a,$b,$c,$d,$e)
#object(A)#1(0){}
#object(B)#2(0){}
#object(B)#2(0){}
#object(A)#1(0){}
#object(A)#1(0){}
————————————————
總結(jié):
公共靜態(tài)函數(shù)getInstance()
{
??如果(!static::$instanceinstanceofstatic){
??????static::$instancenewstatic()
??}
??返回static::$instance
}
#Static::$實(shí)例必須在上述方法中使用。s::$instance不能用的原因是子類(lèi)動(dòng)態(tài)調(diào)用子類(lèi)的靜態(tài)屬性。
#靜態(tài)屬性必須受到保護(hù)。原因是動(dòng)態(tài)調(diào)用關(guān)鍵字static來(lái)傳遞不在原生類(lèi)型中的屬性,相當(dāng)于直接調(diào)用類(lèi)名::$instance。
#子類(lèi)必須重新定義受保護(hù)的static$instance或使用父類(lèi)的靜態(tài)屬性。
如果你仍然不不知道,可以私信給我回答。