91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中訪問控制的使用方法

發布時間:2020-06-28 10:56:25 來源:億速云 閱讀:134 作者:Leah 欄目:編程語言

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

1. 屬性的訪問控制

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

對var關鍵詞感興趣的可以看一下http://stackoverflow.com/ques...

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

2. 方法的訪問控制

同樣,類中的方法也可以被定義為公有(public),受保護(protected),私有(private)三個中的一個。但是如果是公有,方法前的關鍵詞public可以不寫。即不寫關鍵次,默認為公有。

例如:

class Bar()
{
    function hello() # 此時該方法默認為公有
    {
        print("hello");
    }
}

那么如果把類中的構造函數私有話了會發生什么?例如:

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
}

很顯然,我們就不能直接用new Demo()來創建實例了,因為創建實例的時候會在外部調用__construct()方法。怎么辦?我們或許可以在類里寫一個靜態方法來獲取實例對象。這樣就即是在本類中調用__construct()方法,也不用在外部實例化,簡直完美!

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
    
    public static function getInstance()
    {
    
        return new Demo();#這是Demo類內部,可以用new Demo()實例化調用私有的__construct()方法
    }
}
#在類外面,我們就可以這么玩了
Demo::getInstance();

但是話又說回來,我們先把__construct私有化,又千方百計用靜態方法獲取到實例。這是折騰什么鬼?

其實在在設計模式中會經常使用這樣的方法來控制對象的創建,比如單例模式只允許有一個全局唯一的對象。

如果我們需要在全局中只有一個唯一的對象,上面的代碼還不夠。因為只要有人調用了兩次getInstance(),那么就生成了兩個了。所以我們再把上面的代碼改一下

class Demo()
{
    private function __construct()
    {
        print("I'm a private construct function");
    }
    # 先定義一個空成員裝對象
    public $_object = null;
    public static function getInstance()
    {
        if(empty(self::$_object))
        {        
            # 如果沒有創建過,那么就new一個
            return new Demo();
        }
        #否則(即以及創建過),我們只要放回已經存在的那個即可
        return $_object
    }
}

關于php中訪問控制的使用方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西丰县| 当涂县| 乐都县| 诸暨市| 栖霞市| 晋州市| 华宁县| 南昌县| 甘谷县| 新昌县| 平远县| 准格尔旗| 台湾省| 修武县| 凯里市| 台东县| 泰宁县| 社旗县| 遵义市| 黄平县| 弥勒县| 大竹县| 孟连| 探索| 皮山县| 江源县| 迁西县| 吐鲁番市| 布尔津县| 剑阁县| 上犹县| 涞源县| 宾川县| 如东县| 太仆寺旗| 遂宁市| 滁州市| 永昌县| 临洮县| 湛江市| 合水县|