Thinkphp事件机制如何实现
事件机制的实现有两种途径:通过监听、通过订阅
一、通过监听
1、创建监听类:在命令行模式下进入框架根目录执行
php think make:listener <自定义的类名>
例如:
php think make:listener UserListener
执行之后将在<框架根目录>app
listener下生成
UserListener这个类。
2、配置监听:在<框架根目录>appevent.php这个文件的listen数组中配置UserListener这个类,如下:
'listen' => [
'testEvent' => ['applistenerUserListener']
],
3、触发监听:在你需要触发监听的地方加入如下代码
event('testEvent');
注意:这里的参数testEvent即为事件名称,可随便定义,但必须要与在event.php文件里配置的键名一致。
触发监听时你可以带上第二个参数。通过第二个参数你可以把任何数据传递到UserListener这个类中,也就是handle方法的参数(不明白啥意思的结合下面的完整代码理解)。
4、处理监听逻辑:在UserListener类的handle方法中完成业务逻辑
完整代码如下
Other:一个用来测试的类
<?php namespace app\controller; class Other { public function hello() { echo 'hello function'; } }
Index:触发监听的类
登录后复制
UserListener:事件监听类
<?php namespace app\listener; class UserListener { /** * 事件监听处理 * * @return mixed */ public function handle($event) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($event); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($event); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $event->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $event->hello(); } }
二、通过订阅
1、创建订阅类
在命令行模式下进入框架根目录执行
php think make:subscribe <自定义的类名>
例如:
php think make:subscribe UserSubscribe
执行之后将在<框架根目录>appsubscribe下生成UserSubscribe这个类。
2、配置监听
在<框架根目录>appevent.php这个文件的subscribe数组中配置UserSubscribe这个类,如下:
'subscribe' => ['appsubscribeUserSubscribe'],
注意:为了测试效果,要把上面配置的UserListener从listen数组删除掉
3、触发监听
跟第一种途径一样
4、处理监听逻辑
处理监听的逻辑又有两种方法,我称之为自动绑定和手动绑定。手动绑定和自动绑定是互斥的,只能二选一。
4.1 自动绑定
完成业务逻辑的ontestEvent方法应该被添加到UserSubscribe类中。添加的方法名不能随意定义,规则是事件名称前面加上on。因为我们在event.php里定义的事件名称是testEvent,所以方法名就是ontestEvent(注意大小写)。监听方法定义之后就自动与事件绑定,所以我称之为自动绑定。
完整代码如下
Other和Index类的代码跟第一种途径一样
UserSubscribe:事件订阅类
<?php namespace app\subscribe; class UserSubscribe { public function ontestEvent($user) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($user); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
4.2 手动绑定
首先,创建事件类,负责处理具体的业务逻辑。在命令行模式下进入框架根目录执行:
php think make:event <自定义的类名>
例如:
php think make:event UserEvent
执行之后将在<框架根目录>appevent下生成UserEvent这个类。
再在该类中定义一个handle方法,该方法有一个传入参数。方法名和传入的参数名可以任意定义。具体的业务逻辑就可以放在handle方法里面处理。
接下来,在UserSubscribe类里面新增subscribe方法,该方法需要接收一个Event对象作为参数。接着,在该函数里将事件监听绑定到UserEvent类的handle方法上。如下:
$event->listen('testEvent', [app('app\event\UserEvent'), 'handle']);
完整代码如下
Other和Index类的代码跟第一种途径一样
UserSubscribe:事件订阅类
登录后复制
UserEvent:事件处理类
<?php declare (strict_types = 1); namespace app\event; class UserEvent { public function handle($user) { //当调用Index类的test1方法时该代码有效,$user为null var_dump($user); //当调用Index类的test2方法时该代码有效,$user为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$user为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$user为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
以上是Thinkphp事件机制如何实现的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

运行 ThinkPHP 项目需要:安装 Composer;使用 Composer 创建项目;进入项目目录,执行 php bin/console serve;访问 http://localhost:8000 查看欢迎页面。

ThinkPHP 拥有多个版本,针对不同 PHP 版本而设计。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修复 bug 和提供新功能。当前最新稳定版本为 ThinkPHP 6.0.16。在选择版本时,需考虑 PHP 版本、功能需求和社区支持。建议使用最新稳定版本以获得最佳性能和支持。

ThinkPHP Framework 的本地运行步骤:下载并解压 ThinkPHP Framework 到本地目录。创建虚拟主机(可选),指向 ThinkPHP 根目录。配置数据库连接参数。启动 Web 服务器。初始化 ThinkPHP 应用程序。访问 ThinkPHP 应用程序 URL 运行。

Laravel 和 ThinkPHP 框架的性能比较:ThinkPHP 性能通常优于 Laravel,专注于优化和缓存。Laravel 性能良好,但对于复杂应用程序,ThinkPHP 可能更适合。

《开发建议:如何利用ThinkPHP框架实现异步任务》随着互联网技术的迅猛发展,Web应用程序对于处理大量并发请求和复杂业务逻辑的需求也越来越高。为了提高系统的性能和用户体验,开发人员常常会考虑利用异步任务来执行一些耗时操作,比如发送邮件、处理文件上传、生成报表等。在PHP领域,ThinkPHP框架作为一款流行的开发框架,提供了一些便捷的方式来实现异步任务。

ThinkPHP 安装步骤:准备 PHP、Composer、MySQL 环境。使用 Composer 创建项目。安装 ThinkPHP 框架及依赖项。配置数据库连接。生成应用代码。启动应用并访问 http://localhost:8000。

ThinkPHP 是一款高性能的 PHP 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。

开发建议:如何利用ThinkPHP框架进行API开发随着互联网的不断发展,API(ApplicationProgrammingInterface)的重要性也日益凸显。API是不同应用程序之间进行通信的桥梁,它可以实现数据共享、功能调用等操作,为开发者提供了相对简单和快速的开发方式。而ThinkPHP框架作为一款优秀的PHP开发框架,具有高效、可扩展和易用
