Yii源碼解讀-屬性
Yii基礎
屬性 property
屬性用於表徵類別的狀態,從存取的形式來看,屬性與成員變數沒有區別。但是,成員變數是就類別的結構構成而言的概念,而屬性是就類別的功能邏輯而言的概念
Q: 屬性和成員變數有什麼區別嗎?
成員變數是一個「內」概念,反映的是類別的結構構成。屬性是一個「外」概念,反映的是類別的邏輯意義。
成員變數沒有讀寫權限控制,而屬性可以指定為唯讀或只寫,或可讀可寫。
成員變數不對讀出作任何後處理,不對寫入作任何預處理,而屬性則可以。
public成員變數可以視為一個可讀可寫、沒有任何預處理或後處理的屬性。 而private成員變數由於外部不可見,與屬性「外」的特性不相符,所以不能視為屬性。
雖然大多數情況下,屬性會由某個或某些成員變數來表示,但屬性與成員變數沒有必然的對應關係, 例如與非門的output 屬性,就沒有一個所謂的$output 成員變數與之對應。
由
yiibaseObject
提供了對屬性的支援
屬性的實作
<code>class foo extends yii\base\object{ private $_title; public function setTitle($title){ $this->_title = trim($title); } public function getTitle(){ return $this->_title; } }</code>
屬性能夠對類變量實現更好的封裝,同時構件入口,對成員變量統一管理。
然而__get()
, __set()
遍歷所有成員變量,找不到匹配的成員變量時才被調用。其效率天生地低於使用成員變數的形式。在一些表示資料結構、資料集合等簡單情況下,且不需讀寫控制等, 可以考慮使用成員變數作為屬性,這樣可以提高一點效率。
自動呼叫 __get() __set() 的時機只是發生在存取不存在的成員變數時。 因此,如果定義了成員變數 public $title 那麼,就算定義了 getTitle() setTitle() , 他們也不會被呼叫。因為 $post->title 時,會直接指向該 public $title。
PHP對於類別方法不區分大小寫,即大小寫不敏感,對屬性名也是不區分大小寫的。
__get() __set() 都是public的,
static
的方法統統不好使。
Component
Yii自稱是基於組成的框架。
yiibaseComponent
繼承自yiibaseObject
,Component重載了Object中的屬性方法,同時也加入了事件和行為。
由於重載加入了事件和行為,Component的效能會筆Object差一點。
Object的配置
Yii的物件配置方法是統一的。所有物件的配置都是透過Object
中的__construct()
來配置。配置的本質就在Yii::configure()
中,他透過配置數組,建構屬性。
Q: 如果配置是多維的陣列怎麼辦呢?
Yii在
yiidiServiceLocator
中實現了對這一數組的具體處理:setComponents
。
Summary
透過yiibaseObject::__construct()
,我們可以看到,所有對象,包括Component的屬性的加載,均有4個階段,(前三個階段是一氣呵成在一起的)。
預先初始化:預設定義Property
Yii::configure()
來載入配置數組,覆寫Propertyin初始化:
in初始化的執行方法
階段。參考
http://www.digpage.com/
-
以上就介紹了Yii原始碼解讀-屬性,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

呼叫@Configuration類別中的@Bean註解的方法,傳回的是同一個範例;而呼叫@Component類別中的@Bean註解的方法,傳回的是一個新的實例。

每年Apple發布新的iOS和macOS大版本之前,用戶都可以提前幾個月下載測試版搶先體驗一番。由於大眾和開發人員都使用該軟體,蘋果公司為兩者推出了developer和public版即開發者測試版的公共測試版。 iOS的developer版和public版有什麼差別呢?從字面上的意思來說,developer版是開發者測試版,public版是公共測試版。 developer版和public版面向的物件不同。 developer版是蘋果公司給開發者測試使用的,需要蘋果開發者帳號才能收到下載併升級,是

一、基礎的動態引入元件:簡單的動態引入的意思是,前端知道要引入哪些元件,將多個元件引入到父元件中,但不渲染它,滿足一定條件後,才去在某個位置渲染指定的組件。 import{reactive,ref,shallowReactive,onActivated,defineAsyncComponent,}from'vue';constcustomModal=defineAsyncComponent(()=>import('./modal/CustomM

在當前資訊時代,大數據、人工智慧、雲端運算等技術已成為了各大企業關注的熱點。在這些技術中,顯示卡渲染技術作為一種高效能圖形處理技術,受到了越來越多的關注。顯示卡渲染技術廣泛應用於遊戲開發、影視特效、工程建模等領域。而對於開發者來說,選擇一個適合自己專案的框架,是一個非常重要的決策。在目前的語言中,PHP是一種相當有活力的語言,一些優秀的PHP框架如Yii2、Ph

隨著雲端運算技術的不斷發展,資料的備份已經成為了每個企業必須要做的事情。在這樣的背景下,開發一款高可用的雲端備份系統尤其重要。而PHP框架Yii是一款功能強大的框架,可以幫助開發者快速建立高效能的Web應用程式。以下將介紹如何使用Yii框架開發一款高可用的雲端備份系統。設計資料庫模型在Yii框架中,資料庫模型是非常重要的一環。因為資料備份系統需要用到很多的表和關

隨著互聯網的不斷發展,Web應用程式開發的需求也越來越高。對於開發人員而言,開發應用程式需要一個穩定、高效、強大的框架,這樣可以提高開發效率。 Yii是一款領先的高效能PHP框架,它提供了豐富的特性和良好的性能。 Yii3是Yii框架的下一代版本,它在Yii2的基礎上進一步優化了效能和程式碼品質。在這篇文章中,我們將介紹如何使用Yii3框架來開發PHP應用程式。

Yii框架是一個開源的PHPWeb應用程式框架,提供了眾多的工具和元件,簡化了Web應用程式開發的流程,其中資料查詢是其中一個重要的元件之一。在Yii框架中,我們可以使用類似SQL的語法來存取資料庫,從而有效率地查詢和操作資料。 Yii框架的查詢建構器主要包括以下幾種類型:ActiveRecord查詢、QueryBuilder查詢、命令查詢和原始SQL查詢

Vue.js是一個流行的前端框架,它提供了許多API用於組件的客製化。本文將介紹Vue中mixin、extend、component等API,幫助您掌握元件客製化的技巧。 mixinmixin是Vue中重複使用元件程式碼的一種方式。它允許我們將已經編寫的程式碼重複使用到不同的元件中,從而減少重複程式碼的編寫。例如,我們可以使用mixin來幫助我們在多個群組
