TP5 行为Behavior用法说明

无论是tp3还是在tp5中,行为都是一个非常重要的概念,关于太多的理论知识,就不多说了,不了解的请查看开发文档:TP5 行为概述

以下,就由代码来一步一步实现行为定义、绑定以及执行的过程

一、行为定义

首先定义一个简单的行为,就是直接返回参数

 namespace app\admin\behavior;

 class Test
{
public function run(&$title)
{
return $title;
} public function Fun1()
{
return 5;
} public function TestOrder()
{
return 1;
}
}

二、行为绑定及触发

行为定义完成后,就需要绑定到某个标签位置才能生效,否则是不会执行的。

使用Hook类的add方法注册行为,

1、标签位fun1在行为类Test方法列表中,所以执行fun1方法,即使标签位定义为FUn1,照样执行

  $title = '我是title';
Hook::add('FUn1','app\\admin\\behavior\\Test');
dump(Hook::listen('FUn1',$title));die;

结果为:

 array(1) {
[0] => int(5)
}

2、标签位abc不在行为类Test方法列表中,所以默认执行run方法,如果连run方法不存在,那就报错了,提示run方法不存在,详见Hook类的exec方法说明

  $title = '我是title';
Hook::add('abc','app\\admin\\behavior\\Test');
dump(Hook::listen('abc',$title));die;

结果为:

 array(1) {
[0] => string(11) "我是title"
}

3、在tp5.0.4版本以上,如果行为类Test中方法采用驼峰法命名,要想标签位与之对应,则写成test_order

  $title = '我是title';
Hook::add('test_order','app\\admin\\behavior\\Test');
dump(Hook::listen('test_order',$title));die;

结果为:

 array(1) {
[0] => int(1)
}

补充:行为绑定,也支持闭包,形如:

  Hook::add('abc',function ($title){
return $title;
});

TP5 行为Behavior用法说明的更多相关文章

  1. thinkphp常见问题

    1.数据库查询中execute和query方法的区别 tp中execute()和query()方法都可以在参数里直接输入sql语句. 但是不同的是execute()通常用来执行insert或者upda ...

  2. 你不得不掌握的thinkphp5

    thinkphp官网在去年的时候发布了tp的颠覆版本thinkphp5,tp5确实比之前的版本好用了很多,增加了很多的一些特性,它采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖, ...

  3. TP5中find_in_set的用法

    TP5.1.22版本 $id=4; Db::name('menu')->where('FIND_IN_SET(:id,pid_all)',['id' => $id])->update ...

  4. TP5 查询mysql数据库时的find_in_set用法

    $where['class_id'] = ['in', '$cid_all']; $where['id'] = ['in', $all_user_id];//或这样子 $where['title'] ...

  5. tp5获取器的用法。

    1.命名规则   get + 属性名的驼峰命名+ Attr      ------>在相应的model中创建方法 例如: protected function getSexAttr($value ...

  6. Tp5 的 validate 自动验证

    tp5自带的验证功能: 用法之一: $validate = new \think\Validate([ ['name', 'require|alphaDash', '用户名不能为空|用户名格式只能是字 ...

  7. MVC JsonResult的用法

    本文导读:当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON格式予以响应,而这可以通过JsonResult来解决.下 ...

  8. tp5中的一些小方法

    // 当使用一个新页面替换当前页面的body后,body刷新了,所选择的select值就不能保存住,解决方法如下: 作业题目<select> <option>--请选择--&l ...

  9. Android Material Design控件学习(一)——TabLayout的用法

    前言 Google官方在14年Google I/O上推出了全新的设计语言--Material Design.一并推出了一系列实现Material Design效果的控件库--Android Desig ...

随机推荐

  1. js 去掉字符串前后空格5种方法

    第一种:循环检查替换 //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 function trimLeft(s ...

  2. zabbix web端有数据但是没有图形

    zabbix web端有数据但是没有图形 我遇到的情况是,在配置 zabbix 网站目录时,修改了zabbix 目录的所有者和所属组,以使得 zabbix/conf/zabbix.conf.php 文 ...

  3. Java —异常

    异常简介 有异于常态,和正常情况不一样,有错误出现,阻止当前方法或作用域,称为异常. Java中的异常类都继承Throwable类,它有两个子类:Error和Exception.Error很少接触,主 ...

  4. 监控系统 - pnp4nagios

    pnp4nagios是nagios的一个插件,用于将perfdata数据写入rrd,用于展示流量图,目前最高版本0.6.25. 我用官方下载的tar.gz打rpm包,官方提供的pnp4nagios.s ...

  5. 监控系统-nagios

    https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/ install yum -y install nagios-4 ...

  6. Java获取Date类型-针对SQL语句

    简便使用Date类型: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedState ...

  7. Python基础学习之集合

    集合是一个无序.不重复的数据集合,它的主要作用如下: 去重:把一个列表变成集合,就可以去除重复的内容 关系测试:测试两组数据之间的交集.并集.差集等关系 集合常用的操作: #创建一个数值集合 s=se ...

  8. leetcode: 数组

    1. longest-consecutive-sequence Given an unsorted array of integers, find the length of the longest ...

  9. git/github初级运用自如(转自:虫师)

    注:本文来源于 虫师博客(http://www.cnblogs.com/fnng/archive/2012/01/07/2315685.html) ,内容详尽,真实有用. 另:发一个github使用教 ...

  10. input,button制作按钮IE6,IE7点击时1px黑边框的解决方法

    按钮在IE6中点击时1px黑边框的最常见的解决方法 首先设置按钮为none,然后在按钮外面套一层来实现边框的效果,部分代码如下 .btnbox{ border:solid 1px red;} .btn ...