目錄
1. 元件屬性
2. 元件事件
3. 元件行為
首頁 後端開發 php教程 Yii框架官方指南系列10—基礎知識:組件

Yii框架官方指南系列10—基礎知識:組件

Feb 11, 2017 am 09:41 AM



Yii 應用建立於組件之上。元件是 CComponent 或其子類別的實例。使用組件主要涉及存取它的屬性以及觸發或處理它的時間。 基類 CComponent 指定如何定義屬性和事件。

1. 元件屬性

組件的屬性就像物件的公共成員變數。它是可讀寫的。例如:


$width=$component->textWidth;     // 获取 textWidth 属性
$component->enableCaching=true;   // 设置 enableCaching 属性
登入後複製

要定義一個元件屬性,我們只需在元件類別中定義一個公用成員變數。更靈活的方式是定義其 getter 和 setter 方法,例如:


public function getTextWidth()
{
    return $this->_textWidth;
}

public function setTextWidth($value)
{
    $this->_textWidth=$value;
}
登入後複製

上述程式定義了一個可寫的屬性名為 textWidth(名字是大小不寫的敏感)。 當讀取屬性時,getTextWidth() 就會被調用,其返回值則成為屬性值;相似的, 當寫入屬性時,setTextWidth() 被調用。如果 setter 方法沒有定義,則屬性將是唯讀的, 如果對其寫入則會拋出一個異常。使用 getter 和 setter 方法定義一個屬性有一個好處:即當讀取或寫入屬性時, 可以執行額外的邏輯(例如,執行驗證,觸發事件)。

注意: 透過 getter / setter 定義的屬性和類別成員變數之間有一個細微的差異。前者的名字是大小寫不敏感的, 而後者是大小寫敏感的。

2. 元件事件

元件事件是一些特殊的屬性,它們使用一些稱作 事件句柄 (event handlers)的方法作為其值。 附加(分配)一個方法到一個事件將會引起方法在事件被喚起處自動被呼叫。因此, 一個組件的行為可能會被一種在部件開發過程中不可預見的方式修改。

元件事件以 on 開頭的命名方式定義。和屬性透過 getter/setter 方法來定義的命名方式一樣, 事件的名稱是大小寫不敏感的。以下程式定義了一個 onClicked 事件:


public function onClicked($event)
{
    $this->raiseEvent('onClicked', $event);
}
登入後複製

這裡作為事件參數的 $event  

我們可以附加一個方法到此 event,如下所示:


$component->onClicked=$callback;
登入後複製

這裡的 $callback 指向了一個有效的 PHP 回調。它可以是一個全域函數也可以是類別中的一個方法。 如果是後者,它必須以一個陣列的方式提供: array($object,'methodName').

事件句柄的結構如下:


function methodName($event)
{
    ......
}
登入後複製

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$component-&gt;onClicked=function($event) {     ...... }</pre><div class="contentsignin">登入後複製</div></div>即描述事件的參數(它來自 raiseEvent() 調用)。

$event

 參數是 CEvent 或其子類別的實例。 至少,它包含了關於誰觸發了此事件的資訊。

從版本 1.0.10 開始,事件句柄也可以是一個PHP 5.3以後支援的匿名函數。例如,

// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);
// test() 是行为中的方法。
$component->test();
登入後複製

如果我們現在調用 onClicked()onClicked 號事件將被觸發(在頁)中被觸發事件中的事件。

一個事件可以綁定多個句柄。當事件觸發時, 這些句柄將會被依照它們綁定到事件時的順序依序執行。如果句柄決定組織後續句柄被執行,它可以設定 $event->handled 為 true。

3. 元件行為

從版本 1.0.2 開始,元件已新增了對 mixin 的支持,並且可以綁定一個或多個行為。 行為 是一個對象,其方法可以被它綁定的部件通過收集功能的方式來實現 繼承(inherited),而不是專有化繼承(即普通的類繼承).一個部件可以以'多重繼承'的方式實作多個行為的綁定.

行為類別必須實作 IBehavior 介面。 大多數行為可以繼承自 CBehavior 。如果一個行為需要綁定到一個 模型, 它也可以從專為模型實現綁定特性的 CModelBehavior 或 CActiveRecordBehavior 繼承。

要使用一個行為,它必須先透過呼叫此行為的 attach() 方法來綁定到一個元件。然後我們就可以透過元件呼叫此行為方法:


$behavior=$component->tree;
// 等于下行代码:
// $behavior=$component->asa('tree');
登入後複製

已綁定的行為可以像一個元件中的普通屬性一樣存取。 例如,如果一個名為 tree 的行為綁定到了一個元件,我們就可以透過以下程式碼來獲得指向此行為的引用。


$component->disableBehavior($name);
// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);
// 现在就可以使用了
$component->test();
登入後複製
登入後複製

行為是可以被臨時禁止的,此時它的方法開就會在組件中失效.例如:


$component->disableBehavior($name);
// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);
// 现在就可以使用了
$component->test();
登入後複製
登入後複製

两个同名行为绑定到同一个组件下是有可能的。在这种情况下,先绑定的行为则拥有优先权。

当和 events, 一起使用时,行为会更加强大。当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就可以观察或者改变组件的常规执行流程。

自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 例如, 若一个行为有一个 xyz 的属性,此行为被绑定到组件 $a,然后我们可以使用表达式 $a->xyz 访问此行为的属性。

以上就是Yii框架官方指南系列10——基础知识:组件的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 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教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
如何安裝Win10舊版元件DirectPlay 如何安裝Win10舊版元件DirectPlay Dec 28, 2023 pm 03:43 PM

不少用戶在玩win10的的一些遊戲的時候總是會遇到一些問題,比如說卡屏和花屏等等情況,這個時候我們是可以採用打開directplay這個功能來解決的,而且功能的操作方法也很簡單。 win10舊版元件directplay怎麼安裝1、在搜尋框裡面輸入「控制台」然後開啟2、檢視方式選擇大圖示3、找到「程式與功能」4、點選左側的啟用或關閉win功能5、選擇舊版這裡的勾選上就可以了

如何使用 Vue 實現日曆元件? 如何使用 Vue 實現日曆元件? Jun 25, 2023 pm 01:28 PM

Vue是一款非常流行的前端框架,它提供了許多工具和功能,如元件化、資料綁定、事件處理等,能夠幫助開發者建立出高效、靈活和易於維護的Web應用程式。在這篇文章中,我來介紹如何使用Vue實作一個日曆元件。 1.需求分析首先,我們需要分析這個行事曆組件的需求。一個基本的日曆應該具備以下功能:展示當前月份的日曆頁面;支援切換到前一月或下一月;支援點擊某一天,

Angular元件及其顯示屬性:了解非block預設值 Angular元件及其顯示屬性:了解非block預設值 Mar 15, 2024 pm 04:51 PM

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。

如何開啟win10舊版組件的設置 如何開啟win10舊版組件的設置 Dec 22, 2023 am 08:45 AM

win10舊版元件是需要使用者自己去設定裡面打開的,因為很多的元件平時都是預設關閉的狀態,首先我們需要進入到設定裡面,操作很簡單,跟著下面的步驟來就可以了win10舊版元件在哪裡開啟1、點選開始,然後點選「win系統」2、點選進入控制台3、再點選下面的程式4、點選「啟用或關閉win功能」5、在這裡就可以選擇你要的開啟了

Yii框架中間件:為應用程式提供多重資料儲存支持 Yii框架中間件:為應用程式提供多重資料儲存支持 Jul 28, 2023 pm 12:43 PM

Yii框架中間件:為應用程式提供多重資料儲存支援介紹中間件(middleware)是Yii框架中的重要概念,它為應用程式提供了多重資料儲存支援。中間件的作用類似於一個過濾器,它能夠在應用程式的請求和回應之間插入自訂程式碼。透過中間件,我們可以對請求進行處理、驗證、過濾,然後將處理後的結果傳遞給下一個中間件或最終的處理程序。 Yii框架中的中間件使用起來非常

Vue組件實戰:分頁組件開發 Vue組件實戰:分頁組件開發 Nov 24, 2023 am 08:56 AM

Vue元件實戰:分頁元件開發介紹在網路應用程式中,分頁功能是不可或缺的一個元件。一個好的分頁元件應該展示簡潔明了,功能豐富,而且易於整合和使用。在本文中,我們將介紹如何使用Vue.js框架來開發一個高度可自訂化的分頁元件。我們將透過程式碼範例來詳細說明如何使用Vue元件開發。技術堆疊Vue.js2.xJavaScript(ES6)HTML5和CSS3開發環

Vue元件開發:進度條元件實作方法 Vue元件開發:進度條元件實作方法 Nov 24, 2023 am 08:56 AM

Vue元件開發:進度條元件實作方法前言:在Web開發中,進度列是一種常見的UI元件,在資料要求、檔案上傳、表單提交等場景中常用來顯示作業的進度。在Vue.js中,透過自訂元件的方式,我們可以很方便地實作一個進度條元件,本文將介紹一種實作方法,並提供具體的程式碼範例。希望能對Vue.js初學者有幫助。組件的結構和樣式首先,我們需要定義進度條組件的基本結構和樣

Yii框架中間件:為應用程式新增日誌記錄和偵錯功能 Yii框架中間件:為應用程式新增日誌記錄和偵錯功能 Jul 28, 2023 pm 08:49 PM

Yii框架中間件:為應用程式新增日誌記錄和偵錯功能【引言】在開發Web應用程式時,我們通常需要添加一些附加功能以提高應用程式的效能和穩定性。 Yii框架提供了中間件的概念,使我們能夠在應用程式處理請求之前和之後執行一些額外的任務。本文將介紹如何使用Yii框架的中間件功能來實作日誌記錄和除錯功能。 【什麼是中間件】中間件是指在應用程式處理請求之前和之後,對請求和回應做

See all articles