博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【yii2行为研究】前导课 - 什么是行为?
阅读量:6905 次
发布时间:2019-06-27

本文共 1350 字,大约阅读时间需要 4 分钟。

前阵子我们专题话集中讲解了yii2的事件机制,一共六篇文章,反馈非常好,这次我们再开一个yii2行为机制专题,和大家一起开始行为的奇妙之旅

本节为前导课,主要讲解一个概念,那就是 --- 什么是行为?

先思考一个问题:“通过什么方法可以扩展一个类的能力那?”

对,最常用的就是继承,来个例子。

// 父类class man {    public function likeAv(){            }}//  工程师class developer extends man {    }// use it$developer = new developer();$developer->likeAv();

是的,我们通过继承关系让developer有了一个likeAv的方法,当然比如我们还可定义 phper 继承于 developer 类,等等等等,但是它带来的坏处也是明显的,增加了程序的复杂度和层次关系。

我们在yii2的开发中也会遇到此问题,你是否记得你把所有的控制器都继承了一个自己定义的父类,别说你没干过?

但是这样似乎也不够,我们想让类具有更多能力,很多语言中有一个叫做多重继承的机制,就是一个儿子好几个爹可以,但是,PHP只能单继承,yii2自然也逃离不了这样的约定,那是不是说就没别的招了那?

我是行为,我来了。

在一定程度上,行为解决了这个问题,所以大家千万不要用复杂的大脑复杂化了初衷单纯的行为Behaviors。

行为可以在不修改现有类的情况下,对类的功能进行扩充。 通过将行为绑定到一个类,可以使类具有行为本身所定义的属性和方法,就好像类本来就有这些属性和方法一样。

对的,就是这么牛逼,如果你不信?我们看下官方文档的一句话。

Behaviors are instances of yiibaseBehavior, or of a child class. Behaviors, also known as mixins....

它也叫mixins,建议大家去google查下什么是mixins,也许你对行为会有更好的理解,行为就是mixins,仅此而已。

不知道你是否清楚了?下节课进入到具体的分析阶段,来,一起飞,除了学习行为,本系列更重要的是带你学学如何有效看源码。

还没完

同样是对类能力的扩展,行为和继承的区别我再给大家举个现实的例子,帮助理解(这个例子是我在sf上抄的,感谢被抄者,放个他sf主页表示感谢 )

行为是一种设计模式,继承是编程语言的特性

继承:感觉更像物种的进化,物种的扩展,生成新的物种,这些新的物种又具有不同的特性。也就是说,我必须生成新的具有某种特性或者功能的物种去实现我想要的。

====

行为:想要实现某种功能的时候需要借助别的工具,我想用笔记本电脑画画,那我就买一个触控板,接上就可以。但是前提是我的笔记本要预留跟触控板链接的接口,behavior就相当于这个预留的接口。

====

区别:从实现方式上讲,继承要实现新的属性功能就必须生成一个新的对象。

====

使用行为的方式,

一是不必对现有类进行修改,
二是PHP不支持多继承,但是Yii可以绑定多个行为,从而达到类似多继承的效果。


本文原创发布于微信公众号 北哥兄弟连

微信扫码可以关注

转载地址:http://mymdl.baihongyu.com/

你可能感兴趣的文章
码农也来关注下经济问题<美元加息>对我们的影响
查看>>
Linux用户及用户组管理
查看>>
Python随笔11
查看>>
ARTS打卡计划第三周-Review
查看>>
jQuery validation
查看>>
JavaScript知识架构学习路径(一)- 变量篇
查看>>
正则表达式
查看>>
20050425:公测啊,晚点再说
查看>>
Windows Azure媒体服务使得伦敦奥运会的云端传输成为可能
查看>>
错误:媒体集有 2 个媒体簇,但只提供了 1 个 sql2005 备份错误。
查看>>
软件运行过慢?系统打开特别慢?连系统都装不了?可能是硬盘坏了
查看>>
Mongo的安全验证
查看>>
thinkphp Class 'PDO' not found 错误
查看>>
(实用篇)PHP ftp上传文件操作类
查看>>
Lucene5.x 中文 同义词
查看>>
ASCII码、Unicode码 转中文
查看>>
矩阵的相似对角化
查看>>
java常用类--与用户互动
查看>>
innobackupex 备份数据搭建 MySQL Slave
查看>>
CentOS 6.5安装KVM虚拟化
查看>>