前陣子咱們專題話集中講解了yii2的事件機制,一共六篇文章,反饋很是好,此次咱們再開一個yii2行爲機制專題,和你們一塊兒開始行爲的奇妙之旅php
本節爲前導課,主要講解一個概念,那就是 --- 什麼是行爲?編程
先思考一個問題:「經過什麼方法能夠擴展一個類的能力那?」segmentfault
對,最經常使用的就是繼承,來個例子。設計模式
// 父類
class man {
public function likeAv(){
}
}
// 工程師
class developer extends man {
}
// use it
$developer = new developer();
$developer->likeAv();複製代碼
是的,咱們經過繼承關係讓developer有了一個likeAv的方法,固然好比咱們還可定義 phper 繼承於 developer 類,等等等等,可是它帶來的壞處也是明顯的,增長了程序的複雜度和層次關係。微信
咱們在yii2的開發中也會遇到此問題,你是否記得你把全部的控制器都繼承了一個本身定義的父類,別說你沒幹過?yii2
可是這樣彷佛也不夠,咱們想讓類具備更多能力,不少語言中有一個叫作多重繼承的機制,就是一個兒子好幾個爹能夠,可是,PHP只能單繼承,yii2天然也逃離不了這樣的約定,那是否是說就沒別的招了那?yii
我是行爲,我來了。編程語言
在必定程度上,行爲解決了這個問題,因此你們千萬不要用複雜的大腦複雜化了初衷單純的行爲Behaviors。工具
行爲能夠在不修改現有類的狀況下,對類的功能進行擴充。 經過將行爲綁定到一個類,可使類具備行爲自己所定義的屬性和方法,就好像類原本就有這些屬性和方法同樣。 學習
對的,就是這麼牛逼,若是你不信?咱們看下官方文檔的一句話。
Behaviors are instances of yii\base\Behavior, or of a child class. Behaviors, also known as mixins....
它也叫mixins,建議你們去google查下什麼是mixins,也許你對行爲會有更好的理解,行爲就是mixins,僅此而已。
不知道你是否清楚了?下節課進入到具體的分析階段,來,一塊兒飛,除了學習行爲,本系列更重要的是帶你學學如何有效看源碼。
一樣是對類能力的擴展,行爲和繼承的區別我再給你們舉個現實的例子,幫助理解(這個例子是我在sf上抄的,感謝被抄者,放個他sf主頁表示感謝 segmentfault.com/u/zebrayoun…
行爲是一種設計模式,繼承是編程語言的特性
繼承:感受更像物種的進化,物種的擴展,生成新的物種,這些新的物種又具備不一樣的特性。也就是說,我必須生成新的具備某種特性或者功能的物種去實現我想要的。
====
行爲:想要實現某種功能的時候須要藉助別的工具,我想用筆記本電腦畫畫,那我就買一個觸控板,接上就能夠。可是前提是個人筆記本要預留跟觸控板連接的接口,behavior就至關於這個預留的接口。
====
區別:從實現方式上講,繼承要實現新的屬性功能就必須生成一個新的對象。
====
使用行爲的方式,
一是沒必要對現有類進行修改,
二是PHP不支持多繼承,可是Yii能夠綁定多個行爲,從而達到相似多繼承的效果。
本文原創發佈於微信公衆號 北哥兄弟連。