参考:https://www.cnblogs.com/achengmu/p/6605198.html
https://blog.csdn.net/jalon2015/article/details/46900569
https://www.jianshu.com/p/63e56d2f51ef
还有个http://www.cnblogs.com/jkko123/p/8670826.html

yii2中的行为理解就是,写一个继承yii\base\Behavior的类,然后其他继承自component的组件或者类可以直接使用这个类的方法或者属性

其实就相当于use

例子:
先写继承behavior的类

namespace app\components\behavior;
use yii\base\Behavior;

class MyBehavior extends Behavior{

<span class="hljs-keyword">public</span> <span class="hljs-variable">$name</span>;
<span class="hljs-keyword">public</span> <span class="hljs-variable">$age</span>;
<span class="hljs-comment">// set方法</span>
 <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setName</span><span class="hljs-params">(<span class="hljs-variable">$name</span>)</span>
{<!-- --></span>
    <span class="hljs-variable">$this</span>-&gt;name = <span class="hljs-variable">$name</span>;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getName</span><span class="hljs-params">()</span>
{<!-- --></span>
    <span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>-&gt;name;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setAge</span><span class="hljs-params">(<span class="hljs-variable">$age</span>)</span>
{<!-- --></span>
    <span class="hljs-variable">$this</span>-&gt;age = age;
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAge</span><span class="hljs-params">()</span>
{<!-- --></span>
    <span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>-&gt;age;
}
<span class="hljs-comment">// 也可以在里面写事件</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">events</span><span class="hljs-params">()</span> {<!-- --></span>
    <span class="hljs-keyword">return</span> [
        BaseActiveRecord::EVENT_BEFORE_VALIDATE =&gt; <span class="hljs-string">'beforeValidate'</span>,
        BaseActiveRecord::EVENT_AFTER_INSERT =&gt; <span class="hljs-string">'afterSave'</span>,
        BaseActiveRecord::EVENT_AFTER_UPDATE =&gt; <span class="hljs-string">'afterSave'</span>,
        BaseActiveRecord::EVENT_BEFORE_DELETE =&gt; <span class="hljs-string">'beforeDelete'</span>,
    ];
}

}

然后其他类直接先使用behavior方法用

class DefaultController extends Controller
{

<span class="hljs-keyword">public</span> <span class="hljs-variable">$url</span>;

<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">behaviors</span><span class="hljs-params">()</span>
{<!-- --></span>
    <span class="hljs-keyword">return</span> [   
         <span class="hljs-comment">// 匿名行为,只有行为类名</span>
        <span class="hljs-string">'MyBehavior'</span>=&gt;[
            <span class="hljs-string">'class'</span>=&gt;MyBehavior::className(),      <span class="hljs-comment">// 这边要被上面use了</span>
            <span class="hljs-string">'name'</span>=&gt;<span class="hljs-string">'jerry'</span>,
            <span class="hljs-string">'age'</span>=&gt;<span class="hljs-number">20</span>    
        ]

    ];
}

<span class="hljs-comment">/**
 * 开始在方法中使用
 *<span class="hljs-phpdoc"> @return</span> string
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">actionIndex</span><span class="hljs-params">()</span>
{<!-- --></span>         
    <span class="hljs-keyword">return</span> <span class="hljs-variable">$this</span>-&gt;render(<span class="hljs-string">'index'</span>, [<span class="hljs-string">'age'</span>=&gt;<span class="hljs-variable">$this</span>-&gt;age, <span class="hljs-string">'name'</span>=&gt;<span class="hljs-variable">$this</span>-&gt;name]);<span class="hljs-comment">// 这边直接使用</span>

> 这边是另一个添加行为的方法,就是一个继承了component的类然后attach了behavior,这个attach用的比较多

    <span class="hljs-variable">$MyBehavior</span>=<span class="hljs-keyword">new</span> MyBehavior;<span class="hljs-comment">// 继承的是behavior</span>
    <span class="hljs-variable">$MyBehaviorAttachClass</span>=<span class="hljs-keyword">new</span> MyBehaviorAttachClass;<span class="hljs-comment">// 继承的是component</span>
    <span class="hljs-variable">$MyBehaviorAttachClass</span>-&gt;attachBehavior(<span class="hljs-string">'MyBehavior'</span>,<span class="hljs-variable">$MyBehavior</span>);<span class="hljs-comment">// 附加上去</span>
    <span class="hljs-keyword">echo</span> <span class="hljs-variable">$MyBehaviorAttachClass</span>-&gt;propertyTest;<span class="hljs-comment">// 直接使用行为的属性</span>
    <span class="hljs-keyword">echo</span> <span class="hljs-variable">$MyBehaviorAttachClass</span>-&gt;methodTest();<span class="hljs-comment">// 和方法</span>

}

}