TP5 行为Behavior用法说明

TP5 行为Behavior用法说明

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

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

一、行为定义

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

 1 namespace appadminehavior;
 2 
 3 class Test
 4 {
 5     public function run(&$title)
 6     {
 7         return $title;
 8     }
 9 
10     public function Fun1()
11     {
12         return 5;
13     }
14 
15     public function TestOrder()
16     {
17         return 1;
18     }
19 }

 二、行为绑定及触发

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

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

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

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

结果为:

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

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

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

结果为:

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

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

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

结果为:

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

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

1  Hook::add('abc',function ($title){
2      return $title;
3  });
原文地址:https://www.cnblogs.com/cyfblogs/p/10283760.html