一个绑定了行为的类,表现起来是这样的:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// 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 方法定义的属性:
?
1
2
3
4
5
6
7
|
// "prop1" 是定义在行为类的属性
echo $component ->prop1;
$component ->prop1 = $value ;
类似地也可以调用行为的公共方法:
// foo() 是定义在行为类的公共方法
$component ->foo();
|
如你所见,尽管 $component 未定义 prop1 和 foo() ,它们用起来也像组件自己定义的一样。
如果两个行为都定义了一样的属性或方法,并且它们都附加到同一个组件,那么首先附加上的行为在属性或方法被访问时有优先权。
附加行为到组件时的命名行为,可以使用这个名称来访问行为对象,如下所示:
?
1
|
$behavior = $component ->getBehavior( 'myBehavior' );
|
也能获取附加到这个组件的所有行为:
?
1
|
|
移除行为
要移除行为,可以调用 yii\\base\\Component::detachBehavior() 方法用行为相关联的名字实现:
?
1
|
$component ->detachBehavior( 'myBehavior1' );
|
也可以移除全部行为:
?
1
|
$component ->detachBehaviors();
|
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-06-04 96
-
2025-05-29 81
-
2025-05-25 100
-
2025-05-25 44
-
2025-05-29 82
热门评论