Yii源碼解讀-屬性

來源:互聯網
上載者:User
Yii基礎

屬性 property

屬性用於表徵類的狀態,從訪問的形式上看,屬性與成員變數沒有區別。但是,成員變數是就類的結構構成而言的概念,而屬性是就類的功能邏輯而言的概念

Q: 屬性和成員變數有什麼區別嗎?

  • 成員變數是一個“內”概念,反映的是類的結構構成。屬性是一個“外”概念,反映的是類的邏輯意義。

  • 成員變數沒有讀寫權限控制,而屬性可以指定為唯讀或唯寫,或可讀可寫。

  • 成員變數不對讀出作任何後處理,不對寫入作任何預先處理,而屬性則可以。

  • public成員變數可以視為一個可讀可寫、沒有任何預先處理或後處理的屬性。 而private成員變數由於外部不可見,與屬性“外”的特性不相符,所以不能視為屬性。

  • 雖然大多數情況下,屬性會由某個或某些成員變數來表示,但屬性與成員變數沒有必然的對應關係, 比如與非門的 output 屬性,就沒有一個所謂的 $output 成員變數與之對應。

yii\base\Object 提供了對屬性的支援

屬性的實現

class foo extends yii\base\object{    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對於類方法不區分大小寫,即大小寫不敏感,對屬性名稱也是不區分大小寫。

__get() __set() 都是public的,static的方法統統不好使。

Component

Yii自稱是基於組建的架構。

yii\base\Component繼承自yii\base\Object,Component重載了Object中的屬性方法,同時也加入了事件和行為。

由於重載加入了事件和行為,Component的效能會筆Object差一點。

Object的配置

Yii的對象配置方法是統一的。所有對象的配置都是通過Object中的__construct()來配置。配置的本質就在Yii::configure()中,他通過配置數組,構建屬性。

Q: 如果配置是多維的數組怎麼辦呢?

Yii在yii\di\ServiceLocator中實現了對這一數組的具體處理: setComponents

Summary

通過yii\base\Object::__construct(),我們可以看到,所有對象,包括Component的屬性的載入,均有4個階段,(前三個階段是一氣呵成在一起的)。

  1. 預初始化:預設定義Property

  2. Yii::configure()來載入配置數組,覆蓋Property

  3. 後初始化:init()的執行

  4. 類方法調用階段。

參考

  1. http://www.digpage.com/

以上就介紹了Yii源碼解讀-屬性,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.