搜尋
首頁後端開發php教程Yii源碼解讀-屬性
Yii源碼解讀-屬性Jul 29, 2016 am 08:58 AM
componentobjectpublictitleyii

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
title是什么意思title是什么意思Aug 04, 2023 am 11:18 AM

title是定义网页标题的意思,位于标签内,并且是在浏览器的标题栏中显示的文本,title对于网页的搜索引擎优化和用户体验都非常重要。在编写HTML网页时,应该注意使用相关的关键词和吸引人的描述来定义title元素,以便吸引更多的用户点击和浏览。

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

随着互联网的不断发展,Web应用程序开发的需求也越来越高。对于开发人员而言,开发应用程序需要一个稳定、高效、强大的框架,这样可以提高开发效率。Yii是一款领先的高性能PHP框架,它提供了丰富的特性和良好的性能。Yii3是Yii框架的下一代版本,它在Yii2的基础上进一步优化了性能和代码质量。在这篇文章中,我们将介绍如何使用Yii3框架来开发PHP应用程序。

Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Jun 19, 2023 am 08:09 AM

在当前信息时代,大数据、人工智能、云计算等技术已经成为了各大企业关注的热点。在这些技术中,显卡渲染技术作为一种高性能图形处理技术,受到了越来越多的关注。显卡渲染技术被广泛应用于游戏开发、影视特效、工程建模等领域。而对于开发者来说,选择一个适合自己项目的框架,是一个非常重要的决策。在当前的语言中,PHP是一种颇具活力的语言,一些优秀的PHP框架如Yii2、Ph

Symfony vs Yii2:哪个框架更适合开发大型Web应用?Symfony vs Yii2:哪个框架更适合开发大型Web应用?Jun 19, 2023 am 10:57 AM

随着Web应用需求的不断增长,开发者们在选择开发框架方面也越来越有选择的余地。Symfony和Yii2是两个备受欢迎的PHP框架,它们都具有强大的功能和性能,但在面对需要开发大型Web应用时,哪个框架更适合呢?接下来我们将对Symphony和Yii2进行比较分析,以帮助你更好地进行选择。基本概述Symphony是一个由PHP编写的开源Web应用框架,它是建立

Yii框架中的数据查询:高效地访问数据Yii框架中的数据查询:高效地访问数据Jun 21, 2023 am 11:22 AM

Yii框架是一个开源的PHPWeb应用程序框架,提供了众多的工具和组件,简化了Web应用程序开发的流程,其中数据查询是其中一个重要的组件之一。在Yii框架中,我们可以使用类似SQL的语法来访问数据库,从而高效地查询和操作数据。Yii框架的查询构建器主要包括以下几种类型:ActiveRecord查询、QueryBuilder查询、命令查询和原始SQL查询

java Object转byte与byte转Object的方法是什么java Object转byte与byte转Object的方法是什么Apr 20, 2023 am 11:37 AM

Object转byte与byte转Object今天实现一下如何从Object去转为byte和如何从byte转为Object。首先,定义一个类student:packagecom.byteToObject;importjava.io.Serializable;publicclassstudentimplementsSerializable{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in

HTML中title的含义是什么HTML中title的含义是什么Mar 06, 2024 am 09:53 AM

HTML中的title显示的是网页标题标签,可以让浏览者知道当前页面的主要是讲什么的,所以每个网页都应该有一个单独的title。

Java Object类中的方法怎么用Java Object类中的方法怎么用Apr 18, 2023 pm 06:13 PM

1.Object类介绍Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。范例:使用Object接收所有类的对象classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器