天天看點

php通路控制的介紹

  1. 屬性的通路控制

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

對var關鍵詞感興趣的可以看一下

http://stackoverflow.com/ques...
php通路控制的介紹
  1. 方法的通路控制

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

例如:

php通路控制的介紹

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

php通路控制的介紹

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

php通路控制的介紹

但是話又說回來,我們先把__construct私有化,又千方百計用靜态方法擷取到執行個體。這是折騰什麼鬼?

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

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

php通路控制的介紹

以上就是關于php通路控制的介紹的詳細内容,更多請關注php交流群:

link