在PHP的Yii框架中使用行為Behaviors的方法
一個繫結了行為的類,表現起來是這樣的:
// Step 1: 定義一個將繫結行為的類
class MyClass extends yii\base\Component
{
// 空的
}
// Step 2: 定義一個行為類,他將繫結到MyClass上
class MyBehavior extends yii\base\Behavior
{
// 行為的一個屬性
public $property1 = 'This is property in MyBehavior.';
// 行為的一個方法
public function method1()
{
return 'Method in MyBehavior is called.';
}
}
$myClass = new MyClass();
$myBehavior = new MyBehavior();
// Step 3: 將行為繫結到類上
$myClass->attachBehavior('myBehavior', $myBehavior);
// Step 4: 訪問行為中的屬性和方法,就和訪問類自身的屬性和方法一樣
echo $myClass->property1;
echo $myClass->method1();
上面的程式碼你不用全都看懂,雖然你可能已經用腳趾頭猜到了這些程式碼的意思, 但這裡你只需要記住行為中的屬性和方法可以被所繫結的類像訪問自身的屬性和方法一樣直接訪問就OK了。 程式碼中, $myClass 是沒有 property1 method() 成員的。這倆是 $myBehavior 的成員。 但是,通過 attachBehavior() 將行為繫結到物件之後, $myCalss 就好像練成了吸星大法、化功大法,表現的財大氣粗,將別人的屬性和方法都變成了自己的。
另外,從上面的程式碼中,你還要掌握使用行為的大致流程:
從 yii\base\Component 派生自己的類,以便使用行為;
從 yii\base\Behavior 派生自己的行為類,裡面定義行為涉及到的屬性、方法;
將Component和Behavior繫結起來;
像使用Component自身的屬性和方法一樣,盡情使用行為中定義的屬性和方法。
使用行為,必須像前文描述的一樣先把它附加到 yii\base\Component 類或其子類。一旦行為附加到元件,就可以直接使用它。
行為附加到元件後,可以通過元件訪問一個行為的公共成員變數或 getter 和 setter 方法定義的屬性:
// "prop1" 是定義在行為類的屬性
echo $component->prop1;
$component->prop1 = $value;
類似地也可以呼叫行為的公共方法:
// foo() 是定義在行為類的公共方法
$component->foo();
如你所見,儘管 $component 未定義 prop1 和 foo() ,它們用起來也像元件自己定義的一樣。
如果兩個行為都定義了一樣的屬性或方法,並且它們都附加到同一個元件,那麼首先附加上的行為在屬性或方法被訪問時有優先權。
附加行為到元件時的命名行為,可以使用這個名稱來訪問行為物件,如下所示:
$behavior = $component->getBehavior('myBehavior');
也能獲取附加到這個元件的所有行為:
$behaviors = $component->getBehaviors();
移除行為
要移除行為,可以呼叫 yii\base\Component::detachBehavior() 方法用行為相關聯的名字實現:
$component->detachBehavior('myBehavior1');
也可以移除全部行為:
$component->detachBehaviors();
相關文章
- WPF中的XAML Behaviors(行為)詳解
- Yii 中特殊行為 ActionFilter 的使用示例Filter
- Yii1.1.4釋出,高效能的PHP框架PHP框架
- 優秀PHP優秀框架Laravel和Yii的詳解PHP框架Laravel
- yii2-wx / 在yii2-wx中如何正確的使用try….catch….
- PHP 中`Closure`和`Callable`的區別以及在 Redis 訂閱方法中的使用PHPRedis
- goto 語法在 PHP 中的使用GoPHP
- 在 PBootCMS 中,使用 {php} 和 {eval} 標籤可以在模板中執行 PHP 程式碼bootPHP
- Yii 中優雅的使用事件事件
- 將 goaop 整合到 Yii,在 Yii 中優雅的面向切面程式設計Go程式設計
- 在PHP中陣列遍歷的三種方法PHP陣列
- JAVA Collections.sort方法在SSH三大框架中使用中的問題Java框架
- yii2的下拉框dropDownList使用方法
- 在.Net框架中 C# 實現多執行緒的同步方法詳解框架C#執行緒
- Yii 框架Model和ActiveRecord 的區別框架
- SplitMetrics:使用者在應用商店中的行為調查
- PHP trait 特性在 Laravel 中的使用個人心得PHPAILaravel
- 後期靜態繫結在PHP中的使用PHP
- 前端框架小實驗-在umi框架中以worker執行緒方式使用SQL.js的wasm前端框架執行緒SQLJSASM
- php中foreach的使用PHP
- php的lavarel框架中join和orWhere的用法PHP框架
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 如何在其他php-fpm框架中,使用laravel的限流包?PHP框架Laravel
- AntD框架的upload元件上傳圖片時使用customRequest方法自定義上傳行為框架元件
- PHP單元測試框架PHPUnit的使用PHP框架
- 在PHP中進行curl開啟操作的具體教程PHP
- Laravel 成為最佳 PHP 框架的 14 個理由!LaravelPHP框架
- Laravel成為最佳PHP框架的14個理由!LaravelPHP框架
- Hanlp在ubuntu中的使用方法介紹HanLPUbuntu
- 使用property為類中的資料新增行為
- 在 Ruby 中執行 Shell 命令的 6 種方法
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- 好用的擴充套件,pretty-routes,在PHP7.3.9中的使用套件PHP
- Yii 2.0.45 釋出,框架開始支援 PHP 8.1 ,相容性滿格框架PHP
- PHP框架中使用者認證和授權的實現方法與示例PHP框架
- YII 的 with 與 joinwith 的區別和使用
- php中呼叫類的私有方法PHP
- 淺談 PHP 中的 Trait 使用方法,報錯如何解決PHPAI
- Yii框架之框架部署、控制器、檢視的呼叫、頁面的整合框架