這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹php中訪問控制的使用方法,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
錦屏網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),錦屏網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為錦屏上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的錦屏做網(wǎng)站的公司定做!1. 屬性的訪問控制
php中,類的屬性必須被定義為公有(public),受保護(hù)(protected),私有(private)三個(gè)中的一個(gè)。PHP4中可以用var關(guān)鍵詞定義屬性,默認(rèn)未公有。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護(hù)的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。
對(duì)var關(guān)鍵詞感興趣的可以看一下http://stackoverflow.com/ques...
class Foo() { $name = "hello world" # 這么寫是錯(cuò)誤的。屬性必須定義訪問控制 }
2. 方法的訪問控制
同樣,類中的方法也可以被定義為公有(public),受保護(hù)(protected),私有(private)三個(gè)中的一個(gè)。但是如果是公有,方法前的關(guān)鍵詞public可以不寫。即不寫關(guān)鍵次,默認(rèn)為公有。
例如:
class Bar() { function hello() # 此時(shí)該方法默認(rèn)為公有 { print("hello"); } }
那么如果把類中的構(gòu)造函數(shù)私有話了會(huì)發(fā)生什么?例如:
class Demo() { private function __construct() { print("I'm a private construct function"); } }
很顯然,我們就不能直接用new Demo()來創(chuàng)建實(shí)例了,因?yàn)閯?chuàng)建實(shí)例的時(shí)候會(huì)在外部調(diào)用__construct()方法。怎么辦?我們或許可以在類里寫一個(gè)靜態(tài)方法來獲取實(shí)例對(duì)象。這樣就即是在本類中調(diào)用__construct()方法,也不用在外部實(shí)例化,簡(jiǎn)直完美!
class Demo() { private function __construct() { print("I'm a private construct function"); } public static function getInstance() { return new Demo();#這是Demo類內(nèi)部,可以用new Demo()實(shí)例化調(diào)用私有的__construct()方法 } } #在類外面,我們就可以這么玩了 Demo::getInstance();
但是話又說回來,我們先把__construct私有化,又千方百計(jì)用靜態(tài)方法獲取到實(shí)例。這是折騰什么鬼?
其實(shí)在在設(shè)計(jì)模式中會(huì)經(jīng)常使用這樣的方法來控制對(duì)象的創(chuàng)建,比如單例模式只允許有一個(gè)全局唯一的對(duì)象。
如果我們需要在全局中只有一個(gè)唯一的對(duì)象,上面的代碼還不夠。因?yàn)橹灰腥苏{(diào)用了兩次getInstance(),那么就生成了兩個(gè)了。所以我們?cè)侔焉厦娴拇a改一下
class Demo() { private function __construct() { print("I'm a private construct function"); } # 先定義一個(gè)空成員裝對(duì)象 public $_object = null; public static function getInstance() { if(empty(self::$_object)) { # 如果沒有創(chuàng)建過,那么就new一個(gè) return new Demo(); } #否則(即以及創(chuàng)建過),我們只要放回已經(jīng)存在的那個(gè)即可 return $_object } }
關(guān)于php中訪問控制的使用方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。