【yii2行为研究】前导课 - 什么是行为?
前阵子我们专题话集中讲解了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,仅此而已。
不知道你是否清楚了?下节课进入到具体的分析阶段,来,一起飞,除了学习行为,本系列更重要的是带你学学如何有效看源码。
还没完
行为是一种设计模式,继承是编程语言的特性
继承:感觉更像物种的进化,物种的扩展,生成新的物种,这些新的物种又具有不同的特性。也就是说,我必须生成新的具有某种特性或者功能的物种去实现我想要的。
====
行为:想要实现某种功能的时候需要借助别的工具,我想用笔记本电脑画画,那我就买一个触控板,接上就可以。但是前提是我的笔记本要预留跟触控板链接的接口,behavior就相当于这个预留的接口。
====
区别:从实现方式上讲,继承要实现新的属性功能就必须生成一个新的对象。
====
使用行为的方式,
一是不必对现有类进行修改,
二是PHP不支持多继承,但是Yii可以绑定多个行为,从而达到类似多继承的效果。
本文原创发布于微信公众号 北哥兄弟连。