摘要:屬性的訪問(wèn)控制中,類的屬性必須被定義為公有,受保護(hù),私有三個(gè)中的一個(gè)。被定義為受保護(hù)的類成員則可以被其自身以及其子類和父類訪問(wèn)。這是折騰什么鬼其實(shí)在在設(shè)計(jì)模式中會(huì)經(jīng)常使用這樣的方法來(lái)控制對(duì)象的創(chuàng)建,比如單例模式只允許有一個(gè)全局唯一的對(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 } }
參考資料:http://www.imooc.com/code/543
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/21884.html
摘要:的應(yīng)用領(lǐng)域服務(wù)器端腳本主要作用應(yīng)用程序圖形界面命令行腳本文件路徑或者腳本代碼安裝打開安裝程序一路即可安裝把壓縮包解壓到系統(tǒng)某一個(gè)目錄中安裝默認(rèn)選項(xiàng)一路就行了配置與打開的文件增加以下內(nèi)容解壓目錄中找到的路徑添加如下內(nèi)容檢測(cè)配置語(yǔ)法配 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)某一個(gè)目錄中安裝默認(rèn)選項(xiàng)一路就行了配置與打開的文件增加以下內(nèi)容解壓目錄中找到的路徑添加如下內(nèi)容檢測(cè)配置語(yǔ)法配 PHP 的應(yīng)用領(lǐng)域 web服務(wù)器端腳本:主要作用 應(yīng)用程序圖形界面 命令行腳本php.exe -f php文件路徑 或者 php.exe -r p...
摘要:對(duì)于應(yīng)用,我們經(jīng)常需要部署多個(gè)實(shí)例用于負(fù)載均衡,在,可以通過(guò)服務(wù)非??焖俚膭?chuàng)建一個(gè)內(nèi)部負(fù)載均衡。這意味著是一個(gè)內(nèi)部負(fù)載均衡器。因此,代表著流量入口和負(fù)載均衡的作用。 什么是Docker Docker不是虛擬機(jī)。 在很多的網(wǎng)絡(luò)教案中喜歡將Docker與虛擬機(jī)進(jìn)行類比,這種類比用于理解Docker的優(yōu)勢(shì)有著不錯(cuò)的作用,因?yàn)镈ocker與虛擬機(jī)有著相同的優(yōu)勢(shì)。但是從技術(shù)而言,虛擬機(jī)技術(shù)則是對(duì)...
摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個(gè)屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對(duì)象事件框架選擇框架。核心模塊和對(duì)象全局對(duì)象,,,事件驅(qū)動(dòng),事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對(duì)...
閱讀 2345·2023-04-25 14:50
閱讀 1410·2021-10-13 09:50
閱讀 1933·2019-08-30 15:56
閱讀 1909·2019-08-29 15:29
閱讀 2949·2019-08-29 15:27
閱讀 3634·2019-08-29 15:14
閱讀 1253·2019-08-29 13:01
閱讀 3351·2019-08-26 14:06