溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中訪問(wèn)控制的使用方法

發(fā)布時(shí)間:2020-06-28 10:56:25 來(lái)源:億速云 閱讀:125 作者:Leah 欄目:編程語(yǔ)言

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹php中訪問(wèn)控制的使用方法,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

1. 屬性的訪問(wèn)控制

php中,類的屬性必須被定義為公有(public),受保護(hù)(protected),私有(private)三個(gè)中的一個(gè)。PHP4中可以用var關(guān)鍵詞定義屬性,默認(rèn)未公有。被定義為公有的類成員可以在任何地方被訪問(wèn)。被定義為受保護(hù)的類成員則可以被其自身以及其子類和父類訪問(wèn)。被定義為私有的類成員則只能被其定義所在的類訪問(wèn)。

對(duì)var關(guān)鍵詞感興趣的可以看一下http://stackoverflow.com/ques...

class Foo()
{
    $name = "hello world" # 這么寫是錯(cuò)誤的。屬性必須定義訪問(wèn)控制
}

2. 方法的訪問(wèn)控制

同樣,類中的方法也可以被定義為公有(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()來(lái)創(chuàng)建實(shí)例了,因?yàn)閯?chuàng)建實(shí)例的時(shí)候會(huì)在外部調(diào)用__construct()方法。怎么辦?我們或許可以在類里寫一個(gè)靜態(tài)方法來(lá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();

但是話又說(shuō)回來(lái),我們先把__construct私有化,又千方百計(jì)用靜態(tài)方法獲取到實(shí)例。這是折騰什么鬼?

其實(shí)在在設(shè)計(jì)模式中會(huì)經(jīng)常使用這樣的方法來(lái)控制對(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))
        {        
            # 如果沒(méi)有創(chuàng)建過(guò),那么就new一個(gè)
            return new Demo();
        }
        #否則(即以及創(chuàng)建過(guò)),我們只要放回已經(jīng)存在的那個(gè)即可
        return $_object
    }
}

關(guān)于php中訪問(wèn)控制的使用方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI