欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Yii框架核心組件類實例詳解

 更新時間:2019年08月06日 11:38:02   作者:ltx06  
這篇文章主要介紹了Yii框架核心組件類,結(jié)合實例形式詳細分析了Yii框架中成員變量擴展、事件模型及行為類綁定相關(guān)原理與操作技巧,需要的朋友可以參考下

本文實例講述了Yii框架核心組件類。分享給大家供大家參考,具體如下:

CComponent類為YII框架的基于組件和事件驅(qū)動編程提供了基礎(chǔ),YII框架中的大部分類都將CComponent類作為基類。

CComponent類為它的子類提供3個特性:

1、成員變量擴展

通過定義兩個成員函數(shù)(getXXX/setXXX)來定義一個成員變量,比如:

public function getText() {…}
public function setText {…}

這樣就相當于定義了一個$text成員變量,可以這樣調(diào)用

$a=new CComponent;
$a=$component->text; // 等價于$a=$component->getText();
$component->text='abc'; // 等價于$component->setText(‘a(chǎn)bc');

CComponent是通過魔術(shù)方法__get和__set來實現(xiàn)“成員變量擴展”特性的,如果對類本身不存在的成員變量進行操作時,php會調(diào)用這個類 的__get和__set方法來進行處理。CComponent利用這兩個魔術(shù)方法實現(xiàn)了“成員變量擴展”特性。下圖描述了一個CComponent的子 類,它增加了active和sessionName兩個成員變量,該圖描述了對于這兩個成員變量的調(diào)用流程。

Posted Image

面向?qū)ο缶幊讨兄苯佣x一個成員變量就可以了,為什么CComponent要通過定義2個函數(shù)來實現(xiàn)一個成員變量呢?一個主要得原因是需要對成員變 量進行“延時加載”,一般情況下類的成員變量是在構(gòu)造函數(shù)或者初始化函數(shù)進行統(tǒng)一賦值,但是在一次web請求的處理過程中不是每個成員變量都會被使用,比 如App類中定義了兩個成員變量:$cache和$db($cache是一個緩存對象,$db是一個數(shù)據(jù)庫鏈接對象),這兩個對象在App類初始化的時候 創(chuàng)建,但是一個web網(wǎng)站的有些頁面,它內(nèi)容可以通過緩存獲取,那么數(shù)據(jù)庫鏈接對象其實就不需要創(chuàng)建。如果將App定義為CComponent的子類,在 App類中定義兩個方法:getCache/getDb,這樣就可以做到第一次使用db成員變量的時候,才調(diào)用getDb函數(shù)來進行數(shù)據(jù)庫鏈接的初始化, 從而實現(xiàn)延時加載——即在第一次使用時進行初始化。雖然延時加載會增加一次函數(shù)調(diào)用,但是可以減少不必要的成員變量的初始化(總體上其實是提升了網(wǎng)站的訪 問速度),而且可以使得我們的代碼更加易維護、易擴展。

延時加載應(yīng)該是“成員變量擴展”特性的最重要的用途,當然這個特性還會有其它用途,想一想,當你操作一個成員變量的時候,你其實是在調(diào)用getXXX和setXXX成員函數(shù),你是在調(diào)用一段代碼!

2、事件模型

事件模型就是設(shè)計模式中的“觀察者模式”:當對象的狀態(tài)發(fā)生了變化,那么這個對象可以將該事件通知其它對象。

為了使用事件模型,需要實現(xiàn)這三個步驟:1、定義事件;2、注冊事件句柄;3、觸發(fā)事件。
CComponent的子類通過定義一個以on打頭的成員函數(shù)來定義一個事件,比如:public function onClick(){…},接著通過調(diào)用attachEventHandler成員函數(shù)來注冊事件句柄(可以注冊多個事件句柄),最后通過調(diào)用 raiseEvent來觸發(fā)事件。

CComponent類使用一個私有的成員變量來保存事件以及處理該事件的所有句柄,該成員變量可以看作一個hash表,hash表的key是事件的名稱,hash表的value是事件處理函數(shù)鏈表。

Posted Image

3、行為類綁定

有兩種辦法可以對類添加特性:1、直接修改這個類的代碼,添加一些成員函數(shù)和成員變量;2、派生,通過子類來擴展。很明顯第二種方法更加易維護、易擴展。如果需要對一個類添加多個特性(多人在不同時期),那么需要進行多級派生,這顯然加大了維護成本。

CComponent使用一種特殊的方式對類信息擴展——行為類綁定。行為類是一個CBehavior的子類,CComponent可以將一個或者多個 CBehavior類的成員函數(shù)和成員變量添加到自己身上,并且在不需要的時候卸載掉某些CBehavior類。下面是一個簡單的例子:

//計算器類
class Calculator extends CBehavior
{
public function add($x, $y) { return $x + $y; }
public function sub($x, $y) { return $x – $y; }
…
}
$comp = new CComponent();
//為我的類添加計算器功能
$comp->attachbehavior(‘calculator', new Calculator());
$comp->add(2, 5);
$comp->sub(2, 5);

CComponent通過__get、__set和__call這3個魔術(shù)方法來實現(xiàn)“行為類綁定”這個特性,當調(diào)用CComponent類不存在的成員 變量和成員方法的時候,CComponent類會通過這三個魔法方法在“動態(tài)綁定的行為對象”上進行查找。即將不存在的成員變量和成員方法路由到“動態(tài)綁 定對象”上。

Posted Image

可以用3句話來總結(jié)CComponent類的特性:

1、 更好的配置一個對象,當設(shè)置對象的成員變量的時候,其實是運行一段代碼;
2、 更好的監(jiān)聽一個對象,當對象的內(nèi)部狀態(tài)發(fā)生變化的時候,其它對象可以得到通知;
3、 更好的擴展一個對象,可以給一個對象增加成員變量和成員函數(shù),還能監(jiān)聽這個對象的狀態(tài)。

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

相關(guān)文章

  • 淺談PHP5.6 與 PHP7.0 區(qū)別

    淺談PHP5.6 與 PHP7.0 區(qū)別

    這篇文章主要介紹了淺談PHP5.6 與 PHP7.0 區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • laravel-admin的圖片刪除實例

    laravel-admin的圖片刪除實例

    今天小編就為大家分享一篇laravel-admin的圖片刪除實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 高性能PHP框架Symfony2經(jīng)典入門教程

    高性能PHP框架Symfony2經(jīng)典入門教程

    這篇文章主要介紹了高性能PHP框架Symfony2的入門教程,對于學習Symfony2的朋友有很好的學習借鑒價值,需要的朋友可以參考下
    2014-07-07
  • PDO操作MySQL的基礎(chǔ)教程(推薦)

    PDO操作MySQL的基礎(chǔ)教程(推薦)

    下面小編就為大家?guī)硪黄狿DO操作MySQL的基礎(chǔ)教程(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • php源碼之將圖片轉(zhuǎn)化為data/base64數(shù)據(jù)流實例詳解

    php源碼之將圖片轉(zhuǎn)化為data/base64數(shù)據(jù)流實例詳解

    在網(wǎng)站開發(fā)中,我們可以看到有的網(wǎng)站將圖片轉(zhuǎn)化為base64數(shù)據(jù)流,這樣做的好處有兩點,一是減少服務(wù)器http請求,二是可以將圖片作為字符串存儲在數(shù)據(jù)庫中,即圖片可以直接從數(shù)據(jù)庫中讀取,那么php如何將圖片轉(zhuǎn)化為data/base64字符串呢?,需要的朋友可以參考下
    2016-11-11
  • Laravel框架實現(xiàn)利用監(jiān)聽器進行sql語句記錄功能

    Laravel框架實現(xiàn)利用監(jiān)聽器進行sql語句記錄功能

    這篇文章主要介紹了Laravel框架實現(xiàn)利用監(jiān)聽器進行sql語句記錄功能,結(jié)合實例形式分析了Laravel框架監(jiān)聽器的創(chuàng)建、引入以及使用監(jiān)聽器記錄sql語句的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • 利用PHP生成靜態(tài)HTML文檔的原理

    利用PHP生成靜態(tài)HTML文檔的原理

    利用PHP,將數(shù)據(jù)庫中的文章數(shù)據(jù)生成單個的HTML文檔。首先,有利于搜索引擎的收錄。其次,避免數(shù)據(jù)庫中的字段暴露在地址欄上,更安全
    2012-10-10
  • PHP調(diào)用VC編寫的COM組件實例

    PHP調(diào)用VC編寫的COM組件實例

    最近項目需要PHP來解析二進制數(shù)據(jù),如果直接PHP做比較麻煩,就想到VC編寫COM組件來做,提供PHP調(diào)用。文章將介紹VC編寫COM組件提供PHP調(diào)用,實現(xiàn)一個計算兩個數(shù)字相加的功能
    2014-03-03
  • 簡單的php數(shù)據(jù)庫操作類代碼(增,刪,改,查)

    簡單的php數(shù)據(jù)庫操作類代碼(增,刪,改,查)

    這幾天準備重新學習,梳理一下知識體系,同時按照功能模塊劃分做一些東西。所以。mysql的操作成為第一個要點。我寫了一個簡單的mysql操作類,實現(xiàn)數(shù)據(jù)的簡單的增刪改查功能。
    2013-04-04
  • Joomla使用Apache重寫模式的方法

    Joomla使用Apache重寫模式的方法

    這篇文章主要介紹了Joomla使用Apache重寫模式的方法,簡單講述了Joomla開啟Apache重寫模式的步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-05-05

最新評論