摘要:成員變量可以視為一個(gè)可讀可寫(xiě)沒(méi)有任何預(yù)處理或后處理的屬性。而成員變量由于外部不可見(jiàn),與屬性外的特性不相符,所以不能視為屬性。在一些表示數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)集合等簡(jiǎn)單情況下,且不需讀寫(xiě)控制等,可以考慮使用成員變量作為屬性,這樣可以提高一點(diǎn)效率。
Yii基礎(chǔ) 屬性 property
屬性用于表征類(lèi)的狀態(tài),從訪問(wèn)的形式上看,屬性與成員變量沒(méi)有區(qū)別。但是,成員變量是就類(lèi)的結(jié)構(gòu)構(gòu)成而言的概念,而屬性是就類(lèi)的功能邏輯而言的概念
Q: 屬性和成員變量有什么區(qū)別嗎?
成員變量是一個(gè)“內(nèi)”概念,反映的是類(lèi)的結(jié)構(gòu)構(gòu)成。屬性是一個(gè)“外”概念,反映的是類(lèi)的邏輯意義。
成員變量沒(méi)有讀寫(xiě)權(quán)限控制,而屬性可以指定為只讀或只寫(xiě),或可讀可寫(xiě)。
成員變量不對(duì)讀出作任何后處理,不對(duì)寫(xiě)入作任何預(yù)處理,而屬性則可以。
public成員變量可以視為一個(gè)可讀可寫(xiě)、沒(méi)有任何預(yù)處理或后處理的屬性。 而private成員變量由于外部不可見(jiàn),與屬性“外”的特性不相符,所以不能視為屬性。
雖然大多數(shù)情況下,屬性會(huì)由某個(gè)或某些成員變量來(lái)表示,但屬性與成員變量沒(méi)有必然的對(duì)應(yīng)關(guān)系, 比如與非門(mén)的 output 屬性,就沒(méi)有一個(gè)所謂的 $output 成員變量與之對(duì)應(yīng)。
屬性的實(shí)現(xiàn)由 yiiaseObject 提供了對(duì)屬性的支持
class foo extends yiiaseobject{ private $_title; public function setTitle($title){ $this->_title = trim($title); } public function getTitle(){ return $this->_title; } }
屬性能夠?qū)︻?lèi)實(shí)現(xiàn)更好的封裝,同時(shí)構(gòu)件入口,對(duì)成員變量統(tǒng)一管理。
然而__get(), __set()遍歷所有成員變量,找不到匹配的成員變量時(shí)才被調(diào)用。其效率天生地低于使用成員變量的形式。在一些表示數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)集合等簡(jiǎn)單情況下,且不需讀寫(xiě)控制等, 可以考慮使用成員變量作為屬性,這樣可以提高一點(diǎn)效率。
自動(dòng)調(diào)用 __get() __set() 的時(shí)機(jī)僅僅發(fā)生在訪問(wèn)不存在的成員變量時(shí)。 因此,如果定義了成員變量 public $title 那么,就算定義了 getTitle() setTitle() , 他們也不會(huì)被調(diào)用。因?yàn)?$post->title 時(shí),會(huì)直接指向該 public $title。
PHP對(duì)于類(lèi)方法不區(qū)分大小寫(xiě),即大小寫(xiě)不敏感,對(duì)屬性名也是不區(qū)分大小寫(xiě)的。
Component__get() __set() 都是public的,static的方法統(tǒng)統(tǒng)不好使。
Yii自稱(chēng)是基于組建的框架。
yiiaseComponent繼承自yiiaseObject,Component重載了Object中的屬性方法,同時(shí)也加入了事件和行為。
Object的配置由于重載加入了事件和行為,Component的性能會(huì)筆Object差一點(diǎn)。
Yii的對(duì)象配置方法是統(tǒng)一的。所有對(duì)象的配置都是通過(guò)Object中的__construct()來(lái)配置。配置的本質(zhì)就在Yii::configure()中,他通過(guò)配置數(shù)組,構(gòu)建屬性。
Q: 如果配置是多維的數(shù)組怎么辦呢?
SummaryYii在yiidiServiceLocator中實(shí)現(xiàn)了對(duì)這一數(shù)組的具體處理: setComponents。
通過(guò)yiiaseObject::__construct(),我們可以看到,所有對(duì)象,包括Component的屬性的加載,均有4個(gè)階段,(前三個(gè)階段是一氣呵成在一起的)。
預(yù)初始化:默認(rèn)定義Property
Yii::configure()來(lái)加載配置數(shù)組,覆蓋Property
后初始化:init()的執(zhí)行
類(lèi)方法調(diào)用階段。
參考
http://www.digpage.com/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21438.html
摘要:行為所要響應(yīng)的事件重載方法,表示這個(gè)行為將對(duì)類(lèi)何種事件進(jìn)行何種反饋。行為用的最多的,也是對(duì)于各種事件的響應(yīng)。當(dāng)出現(xiàn)命名沖突時(shí),行為會(huì)自行排除沖突,自動(dòng)使用先綁定的行為。目前還沒(méi)有能支持行為。 Yii基礎(chǔ) 行為(Behavior) 行為(behavior)可以在不修改現(xiàn)有類(lèi)的情況下,對(duì)類(lèi)的功能進(jìn)行擴(kuò)充。 通過(guò)將行為綁定到一個(gè)類(lèi),可以使類(lèi)具有行為本身所定義的屬性和方法,就好像類(lèi)本來(lái)就有這些...
摘要:環(huán)境需要了解一下一個(gè)純粹的與本地環(huán)境密切相關(guān)的配置項(xiàng)。對(duì)于配置項(xiàng)以數(shù)組進(jìn)行組織。數(shù)組元素表示將要?jiǎng)?chuàng)建的對(duì)象的完整類(lèi)名。數(shù)組元素表示指定為屬性的初始值為。數(shù)組元素表示將綁定到對(duì)象的事件中。對(duì)于形式配置項(xiàng),視配置值為一個(gè)事件,綁定到上。 環(huán)境 需要了解一下cookieValidationKey:一個(gè)純粹的、與本地環(huán)境密切相關(guān)的配置項(xiàng)。 但是,在有些情況下,cookieValidationK...
摘要:的目的也是解耦,并且非常適合基于服務(wù)和組件的應(yīng)用。一個(gè)類(lèi)可以在運(yùn)行時(shí),有針對(duì)性地增減替換所要用到的服務(wù),從而得到一定程度的優(yōu)化。這兩個(gè)數(shù)組均是以服務(wù)或組件的為鍵的數(shù)組。用于保存這些組件或服務(wù)的定義。這個(gè)定義可以是配置數(shù)組對(duì)象類(lèi)名參考 SL的目的也是解耦,并且非常適合基于服務(wù)和組件的應(yīng)用。 Service Locator充當(dāng)了一個(gè)運(yùn)行時(shí)的鏈接器的角色,可以在運(yùn)行時(shí)動(dòng)態(tài)地修改一個(gè)類(lèi)所要選...
摘要:在中使用解耦,有兩種注入方式構(gòu)造函數(shù)注入屬性注入。對(duì)象的實(shí)例化解析依賴(lài)信息該方法實(shí)質(zhì)上就是通過(guò)的反射機(jī)制,通過(guò)類(lèi)的構(gòu)造函數(shù)的參數(shù)分析他所依賴(lài)的單元。 有關(guān)概念 依賴(lài)倒置原則(Dependence Inversion Principle, DIP) 傳統(tǒng)軟件設(shè)計(jì)中,上層代碼依賴(lài)于下層代碼,當(dāng)下層出現(xiàn)變動(dòng)時(shí),上層也要相應(yīng)變化。 DIP的核心思想是:上層定義接口,下層實(shí)現(xiàn)這個(gè)接口,從而使的下...
摘要:事件的綁定和解除對(duì)事件進(jìn)行綁定和解綁。使用全局函數(shù)作為來(lái)進(jìn)行綁定使用對(duì)象的成員函數(shù)來(lái)進(jìn)行綁定使用類(lèi)的靜態(tài)成員函數(shù)進(jìn)行綁定使用匿名函數(shù)上面的數(shù)組是用來(lái)維護(hù)事件數(shù)組。事件的級(jí)別類(lèi)級(jí)別事件類(lèi)級(jí)別事件用于響應(yīng)所有類(lèi)實(shí)例的事件。 Yii基礎(chǔ) 事件 event 使用事件,可以在特定的時(shí)點(diǎn),觸發(fā)執(zhí)行預(yù)先設(shè)定的一段代碼,事件既是代碼解耦的一種方式,也是設(shè)計(jì)業(yè)務(wù)流程的一種模式。 事件的相關(guān)要素 這是一...
閱讀 2044·2021-11-15 11:39
閱讀 3226·2021-10-09 09:41
閱讀 1491·2019-08-30 14:20
閱讀 3262·2019-08-30 13:53
閱讀 3325·2019-08-29 16:32
閱讀 3362·2019-08-29 11:20
閱讀 3018·2019-08-26 13:53
閱讀 775·2019-08-26 12:18