学习yii2.0——行为
学习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——行为的更多相关文章
- 学习yii2.0——基础入门
声明:本文内容来自于yiichina.com的权威指南. 安装 推荐使用composer来安全,可能有点慢(要下载的依赖比较多). composer create-project --prefer-d ...
- 学习yii2.0——事件
参考:https://www.yiichina.com/doc/guide/2.0/concept-events 事件 yii框架中的事件定义和JavaScript中的事件定义差不多:为某个事件绑定一 ...
- 学习 yii2.0——视图之间相互包含
布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...
- YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路
1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.
- 学习yii2.0——依赖注入
依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...
- yii2.0发送qq邮件详情配置
首先要想使用qq发送邮件必须打开使用的qq邮箱里的一个配置,
- Yii2.0 高级版安装 windows
最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...
- Elasticsearch5.3 学习(一):安装、Yii2.0 下载es扩展
Elasticsearch是一个基于Lucene,提供了一个分布式多用户能力的全文搜索引擎.其他就不多说了,官方文档有详细的介绍. 我自己是在CentOS 7.0安装的 Elasticsearch 是 ...
- yii2.0的学习之旅(二)
前言:上一次我们简单认识了一下yii2.0安装,模型基本(增,删,改,查)操作 一.前后台数据交互 *如果你觉得默认的top样式太丑,可以这样关掉* *底部也可以这样关掉* (1)mvc合作操作数据 ...
随机推荐
- 计数排序与桶排序python实现
计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...
- JavaScript -- 时光流逝(十二):DOM -- Element 对象
JavaScript -- 知识点回顾篇(十二):DOM -- Element 对象 (1) element.accessKey: 设置或返回accesskey一个元素,使用 Alt + 指定快捷键 ...
- LeetCode算法题-Number of Segments in a String(Java实现)
这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...
- Beta冲刺博客汇总(麻瓜制造者)
Beta冲刺博客 Beta冲刺(1/5)(麻瓜制造者) Beta冲刺(2/5)(麻瓜制造者) Beta冲刺(3/5)(麻瓜制造者) Beta冲刺(4/5)(麻瓜制造者) Beta冲刺(5/5)(麻瓜制 ...
- Kafka如何删除topic?
Kafka如何删除topic? 今天为大家带来“Kafka删除topic原理解析”,希望可以帮到那些苦于无法删除topic的朋友们. 前提条件: 在启动broker时候开启删除topic的开关,即在s ...
- linux编译64bitHadoop (eg: ubuntu14.04 and hadoop 2.3.0)
Hadoop官网提供的编译好的hadoop-2.3.0.tar.gz二进制包是在32位系统上编译的,在64系统上运行会有一些错误,比如: WARN util.NativeCodeLoader: Una ...
- C#编程の模板
C#泛型编程已经深入人心了.为什么又提出C#模板编程呢?因为C#泛型存在一些局限性,突破这些局限性,需要使用C#方式的模板编程.由于C#语法.编译器.IDE限制,C#模板编程没有C++模板编程使用方便 ...
- eclipse导入maven项目, A resource exists with a different case: '/xxx'.
eclipse 导入maven 项目出现 这是由于你的workspace里有相同的项目, 这时在metadata里可以看到所有的project信息 只需在eclipse的package explore ...
- 微信硬件平台(八) 3 ESP8266向微信服务器请求设备绑定的用户
https://api.weixin.qq.com/device/get_openid?access_token=自己申请微信token&device_type=gh_e93c1b3098b9 ...
- Java多线程(四)—— synchronized关键字续
1.synchronized原理 在java中,每一个对象有且仅有一个同步锁.这也意味着,同步锁是依赖于对象而存在.当我们调用某对象的synchronized方法时,就获取了该对象的同步锁.例如,sy ...