總結(jié)下,使用靜態(tài)成員是為了保證在腳本周期里不被重新初始化,因此避免對類進行實例化而是用類名直接調(diào)用或者訪問(第一次調(diào)用或者訪問的時候生成單例對象,再調(diào)用的時候直接返回這個單例對象)。
我們擁有十余年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信開發(fā)、微信小程序定制開發(fā)、成都手機網(wǎng)站制作、html5、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。在MVC中常被用作以工廠模式生成表Model類單例對象,工廠類中設(shè)置一個static $list數(shù)組成員保存所有生成的表Model單例。如下Factory.class.php(Factory類會自動加載):
class Factory{ public static function M($class_name=''){ static $object_list=array(); //因為是static成員所以不會被清空,注意這里保存的是object數(shù)據(jù)類型 if (isset($object_list[$class_name])) { //如果已經(jīng)存在,直接返回該對象 return $object_list[$class_name]; }else{ //對象數(shù)組中不存在,第一次調(diào)用,則實例化該類,并把對象保存到數(shù)組中 $object_list[$class_name]=new $class_name(); return $object_list[$class_name]; //返回剛剛生成的對象 } } }這樣在賦值時使用$xx=Factory::M('表名'); 即可獲得單例對象了。所謂工廠模式聽著高大上,其實就是個對象倉庫類吧,對于表間結(jié)構(gòu)不復(fù)雜的小型web開發(fā),感覺工廠模式?jīng)]什么太大用,不如require_once然后new來的直接。而且工廠模式說是為了保證單例,可是畢竟還多了一個Factory對象呢。
========
靜態(tài)變量
是只存在于函數(shù)作用域的變量, 不過, 在函數(shù)執(zhí)行完成后,這種變量的值不會丟失,也就是說, 在下一次調(diào)用這個函數(shù)時,變量仍然會記得原來的值. 要將某個變量定義為靜態(tài)的, 只需要在變量前加上 static關(guān)鍵字即可.
類中靜態(tài)元素的使用
在類中, static 關(guān)鍵字有兩種主要用法, 一是用來定義靜態(tài)成員,一是用來定義靜態(tài)方法. 在類的內(nèi)部, 可以使用作用域限定符 (::) 來訪問不同層次作用域的變量.
靜態(tài)成員
靜態(tài)成員是一種類變量, 可以把它看成時屬于整個類而不是屬于類的某個實例. 與一般的實例變量不同的是, 靜態(tài)成員只保留一個變量值, 而這個變量值對所有的實例都是有效的, 也就是說, 所有的實例共享這個成員.
$this 只表示類的當前實例, 而 self:: 表示的是類本身,在類之外的代碼中不能使用這個操作符,而且它不能識別自己在繼承樹層次結(jié)構(gòu)中的位置.
也就是說, 在擴展類中使用self作用域時, self可以調(diào)用基類中聲明的方法, 但它調(diào)用的總是已經(jīng)在擴展類中重寫的方法. 與$this 不同的是, 在使用靜態(tài)變量時,必須在作用域限定符后面加上$符號.
在擴展類中, 在基類的方法被重寫的情況下,使用 parent作用域調(diào)用定義在基類中的方法.靜態(tài)成員也可以只屬于父類. 如果在子類和父類中同時聲明了某個成員,也可以使用parant::在子類中訪問父類中的變量. 在這種情況下, 父類的靜態(tài)成員和子類的靜態(tài)成員保存的是不同的值.
可以在 :: 操作符的左邊寫上類的名稱來靜態(tài)地訪問某個成員, 這樣避免創(chuàng)建類的實例. 不僅省略掉實例化類的代碼, 而且還會更高效, 因為類的每個實例都會占用一小部分的系統(tǒng)資源.
在使用 :: 操作符訪問成員變量時, 需要再次注意對$符號的使用. 因為PHP當前不支持動態(tài)的靜態(tài)變量的使用, 也就是說不支持可變的靜態(tài)變量. 在使用$this->$var時, 被訪問的成員是包含在$var中的變量的值. 而不用$符號訪問某個變量實際上查找的是類的某個常量, 而常量是不能通過$this來訪問的.
PHP6 中提出的static:: 作用域使我們不再需要使用self:: 和parent::. 當希望指向最終的實現(xiàn)功能的類時, 就可以使用static::, 這個限定符會在代碼執(zhí)行之前立即計算出繼承層次機構(gòu)上最后那個類的成員. 之一過程被稱為延遲綁定, 它使我們可以在子類中重寫某個靜態(tài)變量, 并且也可以從某個在父類中聲明的函數(shù)中反問這個最終成員.
靜態(tài)方法
靜態(tài)方法和非靜態(tài)方法之間有一個重要的區(qū)別: 在調(diào)用靜態(tài)方法時, 不再需要擁有類的實例.
靜態(tài)方法和非靜態(tài)方法使用原則:
一是如果某個方法中不包含$this 變量, 就應(yīng)該時靜態(tài)方法; 如果不需要類的實例, 可能還應(yīng)該使用靜態(tài)類, 這樣可以免去實例化類的工作. 另, 在靜態(tài)方法中時不能使用$this 變量的, 因為靜態(tài)方法不屬于某個特定的實例.
PHP中使用作用域限定操作符時, 用變量作為類的名稱時不允許的.
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章名稱:MVC-php靜態(tài)變量,成員和方法-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article28/dpdscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、用戶體驗、網(wǎng)站建設(shè)、網(wǎng)站營銷、營銷型網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容