abei1982 2017-07-08 15:48:23 4223次浏览 2条回复 4 0 0

前阵子我们专题话集中讲解了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 yii\base\Behavior, or of a child class. Behaviors, also known as mixins....

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

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

还没完

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

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

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

====

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

====

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

====

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

您需要登录后才可以回复。登录 | 立即注册