摘要:屬性的訪問控制中,類的屬性必須被定義為公有,受保護,私有三個中的一個。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。這是折騰什么鬼其實在在設計模式中會經常使用這樣的方法來控制對象的創建,比如單例模式只允許有一個全局唯一的對象。
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 } }
參考資料:http://www.imooc.com/code/543
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21884.html
摘要:的應用領域服務器端腳本主要作用應用程序圖形界面命令行腳本文件路徑或者腳本代碼安裝打開安裝程序一路即可安裝把壓縮包解壓到系統某一個目錄中安裝默認選項一路就行了配置與打開的文件增加以下內容解壓目錄中找到的路徑添加如下內容檢測配置語法配 PHP 的應用領域 web服務器端腳本:主要作用 應用程序圖形界面 命令行腳本php.exe -f php文件路徑 或者 php.exe -r p...
摘要:的應用領域服務器端腳本主要作用應用程序圖形界面命令行腳本文件路徑或者腳本代碼安裝打開安裝程序一路即可安裝把壓縮包解壓到系統某一個目錄中安裝默認選項一路就行了配置與打開的文件增加以下內容解壓目錄中找到的路徑添加如下內容檢測配置語法配 PHP 的應用領域 web服務器端腳本:主要作用 應用程序圖形界面 命令行腳本php.exe -f php文件路徑 或者 php.exe -r p...
摘要:對于應用,我們經常需要部署多個實例用于負載均衡,在,可以通過服務非常快速的創建一個內部負載均衡。這意味著是一個內部負載均衡器。因此,代表著流量入口和負載均衡的作用。 什么是Docker Docker不是虛擬機。 在很多的網絡教案中喜歡將Docker與虛擬機進行類比,這種類比用于理解Docker的優勢有著不錯的作用,因為Docker與虛擬機有著相同的優勢。但是從技術而言,虛擬機技術則是對...
摘要:面向對象三大特征繼承性多態性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅動,事件發射器加密解密,路徑操作,序列化和反序列化文件流操作服務端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發、 JavaScript基礎:Js基礎教程、js內置對...
閱讀 2267·2023-04-25 14:50
閱讀 1254·2021-10-13 09:50
閱讀 1868·2019-08-30 15:56
閱讀 1847·2019-08-29 15:29
閱讀 2891·2019-08-29 15:27
閱讀 3551·2019-08-29 15:14
閱讀 1198·2019-08-29 13:01
閱讀 3303·2019-08-26 14:06