一个绑定了行为的类,表现起来是这样的:

// 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();

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php behaviors,详解在PHP的Yii框架中使用行为Behaviors的方法_php技巧相关推荐

  1. php behaviors,详解在PHP的Yii框架中使用行为Behaviors的方法

    一个绑定了行为的类,表现起来是这样的: // Step 1: 定义一个将绑定行为的类 class MyClass extends yii\base\Component { // 空的 } // Ste ...

  2. php behaviors,详解在PHP的Yii框架中使用行为Behaviors的方法_PHP

    一个绑定了行为的类,表现起来是这样的: // Step 1: 定义一个将绑定行为的类 class MyClass extends yii\base\Component { // 空的 } // Ste ...

  3. php behaviors,在PHP的Yii框架中使用行为Behaviors的方法

    一个绑定了行为的类,表现起来是这样的: // Step 1: 定义一个将绑定行为的类 class MyClass extends yii\base\Component { // 空的 } // Ste ...

  4. ABP 详解系列2:解析ABP框架中的数据传输对象与应用服务

    解析ABP框架中的数据传输对象与应用服务 ABP框架是基于ASP.NET的Web开发框架,在ABP中应用服务将领域逻辑暴露给展现层,展现层通过传入数据传输对象参数来调用应用服务,而这里我们就来解析AB ...

  5. php中yii的controller,详解PHP的Yii框架中的Controller控制器,yiicontroller

    详解PHP的Yii框架中的Controller控制器,yiicontroller 控制器是 MVC 模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应. 具 ...

  6. 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用

    近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化.基于语音识别技术的输入法.搜索和翻译等人机交互场景都有了广泛的应用. Librispeech是当前衡量语音识 ...

  7. 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用

    近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化.基于语音识别技术的输入法.搜索和翻译等人机交互场景都有了广泛的应用. Librispeech是当前衡量语音识 ...

  8. 一致性协议raft详解(三):raft中的消息类型

    一致性协议raft详解(三):raft中的消息类型 前言 raft 节点 Raft中RPC的种类 RequestVote leader选举成功后 AppendEntries 请求参数 返回值 存储日志 ...

  9. 地面指示标志_详解消防应急照明和疏散指示系统的施工及安装方法消防施工

    详解消防应急照明和疏散指示系统的施工及安装方法消防施工 消防应急照明与疏散指示系统在生活中随处可见,相信您并不陌生,它是为人员疏散.消防作业提供照明和疏散指示的系统,由各类消防应急灯具及相关装置组成. ...

最新文章

  1. TabLayout 在宽屏幕上tab不能平均分配的问题解决
  2. Linux下Debug模式启动Tomcat进行远程调试
  3. 【 FPGA 】组合逻辑中的竞争与险象问题(四)
  4. linq TO XML 基础
  5. 判断对象存活方法及回收方法
  6. 围成一圈的排列组合问题_分班必考知识点!小学奥数之排列组合问题
  7. spi四种工作模式时序图_还没学会SPI总线协议?干货都在这里
  8. Java日常错误及需要注意细节,持续更新......
  9. liunx上mysql源码安装mysql_搞定linux上MySQL编程(一):linux上源码安装MySQL
  10. cad2020打印样式放在哪个文件夹_CAD图纸管理与打印——布局与图纸集
  11. 历史上最伟大的12位程序员
  12. 【Vue插件】一款很好用的vue日历插件——vue-sweet-calendar
  13. github android 开源,Android github开源项目学习之—仿知乎APP(一)
  14. raise TypeError(f‘Object of type {o.__class__.__name__} ‘ TypeError: Object of type bytes is not
  15. 基于proteus的功率_学习电路仿真:基于proteus电路仿真软件的步进电机仿真
  16. 固态硬盘寿命不长?!快来看看12个固态硬盘优化技巧
  17. 【干货分享】IOS非越狱渠道运营必知的10条
  18. 过年前给家里配了台电脑,19年1月清单
  19. 【实战】minigpt4的体验和微调
  20. 基于SSM开发个人财务管理系统

热门文章

  1. 你还不了解基于session的授权认证吗?
  2. JAVA之JVM知识汇总
  3. JAVA之JVM之内存分配与回收策略(二)
  4. Python之range和xrange的区别
  5. C语言字符数组与字符串的使用及加结束符‘\0‘的问题
  6. linux ping IP地址与telnet 测试IP端口
  7. mysql自动挂载存储_Linux开机自动挂载存储
  8. springboot扫描组件_SpringBoot入口类和@SpringBootApplication详解
  9. php100例代码教程,php实例代码_php用户登录实例教程代码
  10. excel几个数相加等于某个数_随机数加起来等于某个特定数的EXCEL实现方式