学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客:

怎么理解行为

  yii框架的行为有点类似于trait,可以有个大体的概念:

  1、有一个类A,包含一些属性和方法,很普通的一个类A。

  2、现在需要在这个简单的类中使用类B和类C中的某些属性和方法,或者这两个类中为指定事件绑定的事件处理程序。

  有一种方法可以实现:可以使用组合的方式,在这个简单的类A中,创建其他类(B、C)的对象,然后进行其他的操作,比如访问他们的成员属性和方法。

  yii框架中行为的功能:

  1、在类B和类C声明为行为类,可以在这个行为类中定义属性和方法,以及某些事件对应的事件处理程序。

  2、在类A中的behavior方法中,将前面的两个行为类B、C包含进来,那么就可已使用B、C中的行为和方法了。

  注意这里并没有把B、C实例化,而是直接使用B、C类中的方法和属性。

<?php
namespace app\controllers; use yii\web\Controller;
use yii\base\Behavior; class Demo {
public function Show()
{
echo "this is demo<br>";
}
} //自定义的行为类要继承yii\base\Behavior类
class MyHavior1 extends Behavior
{
public $prop = "hello world 1 <br>"; //自定义的方法
public function test()
{
echo "this is MyHavior 1 /tetst<br>";
} public function events()
{
//指定事件
return [
"cry" => function() {echo "don't cry 1<br>";},
"test" => [new \app\controllers\Demo(), "Show"]
];
}
} //自定义的行为类要继承yii\base\Behavior类
class MyHavior2 extends Behavior
{
public $prop = "hello world 2 <br>"; //自定义的方法
public function test()
{
echo "this is MyHavior 2 /tetst<br>";
} public function events()
{
//指定事件
return [
"cry" => function() {echo "don't cry 2<br>";},
"test" => [new \app\controllers\Demo(), "Show"]
];
}
} class HelloController extends Controller
{
public function behaviors()
{
return [
//返回附加行为,默认是都添加
//加载两个行为类,demo和example类似于标签,这里的顺序是有意义的
"demo" => MyHavior1::className(),
"example" => MyHavior2::className()
];
} public function actionIndex()
{
//当两个行为behavior有相同的行为的时候,默认以behaviors中先出现优先级高
echo $this->prop; // hello world 1
$this->test(); //this is MyHavior/tetst 1
$this->trigger("cry"); //don't cry 1 don't cry 2 //手动从前面behaviors()中选择附加行为
$behaviors = $this->getBehavior("example");
echo $behaviors->prop; // hello world 2
$behaviors->test(); // this is MyHavior 2 /tetst
$this->trigger("test"); // this is demo this is demo echo "aaa";
//手动删除附加的行为,现在只有example有意义了
$this->detachBehavior("demo");
echo $this->prop; // hello world 2
$this->test(); //this is MyHavior/tetst 2
$this->trigger("cry"); //don't cry 1 don't cry 2 //从上面的例子中可以看出,事件一旦触发,那么虽然有先后顺序,但是都会执行事件处理程序
//但是访问属性和方法时,如果有重复时,默认是第一个为准
}
}

  

学习yii2.0——行为的更多相关文章

  1. 学习yii2.0——基础入门

    声明:本文内容来自于yiichina.com的权威指南. 安装 推荐使用composer来安全,可能有点慢(要下载的依赖比较多). composer create-project --prefer-d ...

  2. 学习yii2.0——事件

    参考:https://www.yiichina.com/doc/guide/2.0/concept-events 事件 yii框架中的事件定义和JavaScript中的事件定义差不多:为某个事件绑定一 ...

  3. 学习 yii2.0——视图之间相互包含

    布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...

  4. YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路

    1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.

  5. 学习yii2.0——依赖注入

    依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...

  6. yii2.0发送qq邮件详情配置

    首先要想使用qq发送邮件必须打开使用的qq邮箱里的一个配置,

  7. Yii2.0 高级版安装 windows

    最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...

  8. Elasticsearch5.3 学习(一):安装、Yii2.0 下载es扩展

    Elasticsearch是一个基于Lucene,提供了一个分布式多用户能力的全文搜索引擎.其他就不多说了,官方文档有详细的介绍. 我自己是在CentOS 7.0安装的 Elasticsearch 是 ...

  9. yii2.0的学习之旅(二)

    前言:上一次我们简单认识了一下yii2.0安装,模型基本(增,删,改,查)操作 一.前后台数据交互 *如果你觉得默认的top样式太丑,可以这样关掉* *底部也可以这样关掉* (1)mvc合作操作数据 ...

随机推荐

  1. LeetCode算法题-Path Sum(Java实现)

    这是悦乐书的第169次更新,第171篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112).给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路 ...

  2. Java实现鼠标随机移动

    ---恢复内容开始--- 以前在公司工作的时候,电脑限制重重,不允许改锁屏时间,又不允许下载和安装软件. 需要在家办公support的时候,又没有什么事,但还是必须在线,所以就写了个小程序让鼠标自己随 ...

  3. ASP.Net在64位环境开发部署常见问题

    越来越多的开发团队開始使用64位操作系统作为开发环境,也计划将应用部署在安装有64位操作系统的server上.对于ASP.Net开发人员来说.使用64位环境开发部署须要注意下面几个问题.可在项目过程中 ...

  4. java发送163邮件

    在服务挂掉后,可以采用发送邮件的方式来通知开发人员进行异常处理 import java.io.IOException; import java.util.Properties; import java ...

  5. UVA1471-Copying Books(二分答案)

    Problem UVA1471-Copying Books Accept: 2669  Submit: 22797Time Limit: 3000 mSec Problem Description B ...

  6. Python 在 Windows 下安装第三方包,报 Python 未注册的问题解决

    保存一些代码为 reg.py,运行之即可. #/usr/bin/env python # -*- coding: utf-8 -*- import sys from _winreg import * ...

  7. 玄学bug(1)---注释里面的中文会报错

    有时候正常没有问题的程序会报错,可能跟注释里面的中文也有关系 with open('photo1.jpg','rb') as file: data = file.read() #print(data) ...

  8. IntelliJ IDEA 高效率配置

    之前学习和开发的时候一直用Eclipse,现在转战IDEA,记录一下IDEA的个性化设置,有助于提高效率.(参考:http://www.cnblogs.com/huaxingtianxia/p/586 ...

  9. Android开发常用权限设置

    加在AndroidManifest.xml 文件中manifest标签以内,application以外 例如:<!--网络权限 --> <uses-permission androi ...

  10. MFC 坦克定位

    最近学习MFC,写了个用键盘上下左右移动的坦克界面,效果图: 先用VC++新建一个最简单的MFC项目,基于Dialog的 1. 添加坦克图片资源:略 2. 添加3个变量:x, y, m_bitmap ...