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

Yii 框架核心機制解析:CComponent 組件基礎、事件與行為

     編輯:PHP 相關知識

什麼是 Yii 組件?

Yii 中幾乎所有可實例化並繼承自 CComponent 的類別均稱為組件。從 CApplication、控制器、URL 管理器到各類插件,皆以組件形式存在,賦予框架高度彈性與擴充性。

組件特點

  • 繼承 CComponent(直接或間接)
  • 擁有事件與行為機制
  • 可在設定檔中定義屬性

CComponent 三大核心功能

1. 屬性存取 (__set, __get)

透過魔術方法實現虛擬屬性,允許定義 setXxx()、getXxx() 方法來攔截屬性讀寫,進行驗證或轉換。

class Webpage extends CComponent {
    public $title;
    private $_url;
    public function setUrl($value='') {
        if (filter_var($value, FILTER_VALIDATE_URL)) {
            $this->_url = $value;
        }
    }
    public function getUrl() { return $this->_url; }
}

$page = new Webpage();
$page->title = "page title";
$page->url = "/index.php";   // 呼叫 setUrl()
echo $page->url;             // 呼叫 getUrl()

2. 事件機制 (觀察者模式)

定義 onXxx() 方法即宣告事件,內部呼叫 raiseEvent() 通知所有綁定的處理器。

class Form extends CComponent {
    public function onSubmit($event) {
        $this->raiseEvent('onSubmit', $event);
    }
}

$form = new Form();
$form->attachEventHandler('onSubmit', [$logObject, 'saveLog']);
// 或使用 setter 綁定
$form->onSubmit = [$logObject, 'saveLog'];

// 觸發事件
$form->onSubmit(new CEvent($form, ['data' => $_POST]));

同一事件可綁定多個處理器,類似 JavaScript addEventListener。

3. 行為機制 (類似 Trait)

行為類別繼承 CBehavior,定義 events() 回傳事件對應方法陣列。組件透過 attachBehavior() 掛載行為,即可直接呼叫行為的方法與屬性。

class MyAppBehavior extends CBehavior {
    public $status = "app behavior ended.";
    public function events() {
        return ['onEndRequest' => 'appEnd'];
    }
    public function appEnd($event=null) { echo get_class($this); }
}

$app->attachBehavior('myapp', 'MyAppBehavior');
$app->run();
echo $app->status; // 可直接存取行為屬性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved