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