首頁 後端開發 php教程 Yii源碼解讀-屬性

Yii源碼解讀-屬性

Jul 29, 2016 am 08:58 AM
component object public title 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個階段,(前三個階段是一氣呵成在一起的)。

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

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

  3. in初始化:in初始化的執行方法階段。

  4. 參考

http://www.digpage.com/

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
面試官:@Configuration 和 @Component 的區別 面試官:@Configuration 和 @Component 的區別 Aug 15, 2023 pm 04:29 PM

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

iOS的developer版和public版有什麼不同? iOS的developer版和public版有什麼不同? Mar 01, 2024 pm 12:55 PM

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

vue3怎麼使用defineAsyncComponent與component標籤實作動態渲染元件 vue3怎麼使用defineAsyncComponent與component標籤實作動態渲染元件 May 12, 2023 pm 05:55 PM

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

Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Jun 19, 2023 am 08:09 AM

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

如何使用PHP框架Yii開發一個高可用的雲端備份系統 如何使用PHP框架Yii開發一個高可用的雲端備份系統 Jun 27, 2023 am 09:04 AM

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

php如何使用Yii3框架? php如何使用Yii3框架? May 31, 2023 pm 10:42 PM

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

Yii框架中的資料查詢:有效率地存取數據 Yii框架中的資料查詢:有效率地存取數據 Jun 21, 2023 am 11:22 AM

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

Vue 中使用 mixin、extend、component 等 API 實作元件客製化的技巧 Vue 中使用 mixin、extend、component 等 API 實作元件客製化的技巧 Jun 25, 2023 pm 03:28 PM

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

See all articles