首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii Framework 教程 (6):CComponent 組件核心機制——屬性、事件、行為與 Mixin

     編輯:PHP 綜合知識

CComponent:Yii 組件系統的基石

Yii 所有核心類別(控制器、模型、組件、應用)皆繼承自 CComponent,提供三大核心機制:屬性、事件、行為。

1. 屬性:Getter/Setter 封裝

定義 getXxx()/setXxx() 即可像存取變數般使用 $obj->xxx。

<?php
class GameController extends CController {
    // 實際儲存於頁面狀態
    public function getWord() {
        return $this->getPageState('word');
    }
    public function setWord($value) {
        $this->setPageState('word', $value);
    }
}
// 使用
$word = $this->word;      // 呼叫 getWord()
$this->word = 'YII';      // 呼叫 setWord('YII')
// 唯讀屬性:僅定義 getter
// 寫入唯讀屬性會拋出 CException

優點:讀寫時可注入邏輯(驗證、觸發事件、延遲載入)。

2. 事件:觀察者模式實現

定義事件

<?php
public function onClicked($event) {
    $this->raiseEvent('onClicked', $event);
}
  • 方法名以 on 開頭(大小寫不敏感)
  • $event 為 CEvent 或子類實例,至少包含 sender 屬性

綁定事件處理器

<?php
// 全域函式
$component->onClicked = 'myCallback';

// 物件方法
$component->onClicked = array($obj, 'methodName');

// 匿名函式 (PHP 5.3+)
$component->onClicked = function($event) { ... };

觸發與執行順序

  • 呼叫 $component->onClicked() 即觸發
  • 多個處理器依綁定順序執行
  • 處理器可設 $event->handled = true 停止後續執行

3. 行為:Mixin / 多重繼承替代方案

行為類別實作 IBehavior(通常繼承 CBehavior),其方法可被綁定組件「繼承」使用。

綁定與使用

<?php
$component->attachBehavior('tree', $behavior);
$component->test(); // 呼叫行為的 test()

// 存取行為屬性 (1.1.0+)
$component->xyz; // 等同 $behavior->xyz

// 暫時停用/啟用
$component->disableBehavior('tree');
$component->enableBehavior('tree');

行為與事件結合

行為綁定時可自動掛載事件處理器,擴充組件行為而不修改原碼。

實戰應用場景

  • 時間戳記行為:自動填充 created_at/updated_at
  • 樹狀結構行為:Nested Set 實現分類樹
  • 版本控制行為:記錄模型修改歷史
  • 權限控制行為:動態附加 RBAC 檢查

總結

CComponent 讓 Yii 組件具備:

  1. 屬性封裝與邏輯注入
  2. 鬆耦合事件通知
  3. 行為組合實現橫向關注點分離

這是掌握 Yii 擴充機制、開發可複用組件的關鍵基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved