摘要:屬性的訪問控制中,類的屬性必須被定義為公有,受保護(hù),私有三個中的一個。被定義為受保護(hù)的類成員則可以被其自身以及其子類和父類訪問。這是折騰什么鬼其實(shí)在在設(shè)計模式中會經(jīng)常使用這樣的方法來控制對象的創(chuàng)建,比如單例模式只允許有一個全局唯一的對象。
1. 屬性的訪問控制
php中,類的屬性必須被定義為公有(public),受保護(hù)(protected),私有(private)三個中的一個。PHP4中可以用var關(guān)鍵詞定義屬性,默認(rèn)未公有。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護(hù)的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。
對var關(guān)鍵詞感興趣的可以看一下http://stackoverflow.com/ques...
class Foo() { $name = "hello world" # 這么寫是錯誤的。屬性必須定義訪問控制 }
2. 方法的訪問控制
同樣,類中的方法也可以被定義為公有(public),受保護(hù)(protected),私有(private)三個中的一個。但是如果是公有,方法前的關(guān)鍵詞public可以不寫。即不寫關(guān)鍵次,默認(rèn)為公有。
例如:
class Bar() { function hello() # 此時該方法默認(rèn)為公有 { print("hello"); } }
那么如果把類中的構(gòu)造函數(shù)私有話了會發(fā)生什么?例如:
class Demo() { private function __construct() { print("I"m a private construct function"); } }
很顯然,我們就不能直接用new Demo()來創(chuàng)建實(shí)例了,因?yàn)閯?chuàng)建實(shí)例的時候會在外部調(diào)用__construct()方法。怎么辦?我們或許可以在類里寫一個靜態(tài)方法來獲取實(shí)例對象。這樣就即是在本類中調(diào)用__construct()方法,也不用在外部實(shí)例化,簡直完美!
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私有化,又千方百計用靜態(tài)方法獲取到實(shí)例。這是折騰什么鬼?
其實(shí)在在設(shè)計模式中會經(jīng)常使用這樣的方法來控制對象的創(chuàng)建,比如單例模式只允許有一個全局唯一的對象。
如果我們需要在全局中只有一個唯一的對象,上面的代碼還不夠。因?yàn)橹灰腥苏{(diào)用了兩次getInstance(),那么就生成了兩個了。所以我們再把上面的代碼改一下
class Demo() { private function __construct() { print("I"m a private construct function"); } # 先定義一個空成員裝對象 public $_object = null; public static function getInstance() { if(empty(self::$_object)) { # 如果沒有創(chuàng)建過,那么就new一個 return new Demo(); } #否則(即以及創(chuàng)建過),我們只要放回已經(jīng)存在的那個即可 return $_object } }
參考資料:http://www.imooc.com/code/543
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21884.html
摘要:的應(yīng)用領(lǐng)域服務(wù)器端腳本主要作用應(yīng)用程序圖形界面命令行腳本文件路徑或者腳本代碼安裝打開安裝程序一路即可安裝把壓縮包解壓到系統(tǒng)某一個目錄中安裝默認(rèn)選項一路就行了配置與打開的文件增加以下內(nèi)容解壓目錄中找到的路徑添加如下內(nèi)容檢測配置語法配 PHP 的應(yīng)用領(lǐng)域 web服務(wù)器端腳本:主要作用 應(yīng)用程序圖形界面 命令行腳本php.exe -f php文件路徑 或者 php.exe -r p...
摘要:的應(yīng)用領(lǐng)域服務(wù)器端腳本主要作用應(yīng)用程序圖形界面命令行腳本文件路徑或者腳本代碼安裝打開安裝程序一路即可安裝把壓縮包解壓到系統(tǒng)某一個目錄中安裝默認(rèn)選項一路就行了配置與打開的文件增加以下內(nèi)容解壓目錄中找到的路徑添加如下內(nèi)容檢測配置語法配 PHP 的應(yīng)用領(lǐng)域 web服務(wù)器端腳本:主要作用 應(yīng)用程序圖形界面 命令行腳本php.exe -f php文件路徑 或者 php.exe -r p...
摘要:對于應(yīng)用,我們經(jīng)常需要部署多個實(shí)例用于負(fù)載均衡,在,可以通過服務(wù)非常快速的創(chuàng)建一個內(nèi)部負(fù)載均衡。這意味著是一個內(nèi)部負(fù)載均衡器。因此,代表著流量入口和負(fù)載均衡的作用。 什么是Docker Docker不是虛擬機(jī)。 在很多的網(wǎng)絡(luò)教案中喜歡將Docker與虛擬機(jī)進(jìn)行類比,這種類比用于理解Docker的優(yōu)勢有著不錯的作用,因?yàn)镈ocker與虛擬機(jī)有著相同的優(yōu)勢。但是從技術(shù)而言,虛擬機(jī)技術(shù)則是對...
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...
閱讀 2273·2023-04-25 14:50
閱讀 1273·2021-10-13 09:50
閱讀 1874·2019-08-30 15:56
閱讀 1853·2019-08-29 15:29
閱讀 2892·2019-08-29 15:27
閱讀 3569·2019-08-29 15:14
閱讀 1205·2019-08-29 13:01
閱讀 3306·2019-08-26 14:06