PHP实现一个简单的事件逻辑

简介: 很多被广泛使用的CMS,之所以被这么多人应用,就是因为他们的插件机制,可以实现丰富多彩的功能。而插件机制很大程度依赖于事件,在一些关键位置触发事件,可以方便二次开发,并且不更改系统核心代码。

很多被广泛使用的CMS,之所以被这么多人应用,就是因为他们的插件机制,可以实现丰富多彩的功能。而插件机制很大程度依赖于事件,在一些关键位置触发事件,可以方便二次开发,并且不更改系统核心代码。

事件机制本身并不复杂,我们不扯概念理论,直接上代码来看。看完此篇文章,或许可以有助让你更加深刻的理解 laravel 的 route 事件。比如我们有一个添加用户的方法,代码如下:

function addUser($userInfo)
{
   
    $db->execute('insert into tb_users(xxx)');
}

如果我想要我的系统在添加用户以后,可以让二次开发者做一些自定义处理,那么这时候可以使用事件。下面贴出YurunPHP的Event类代码:

<?php
/**
 * 事件类
 */
class Event
{
   
    /**
     * 事件绑定记录
     */
    private static $events = array();

    /**
     * 注册事件
     * @param string $event
     * @param mixed $callback
     * @param bool $first 是否优先执行,以靠后设置的为准
     */
    public static function register({
   mathJaxContainer[0]}callback, $first=false)
    {
   
        if (! isset(self::{
   mathJaxContainer[1]}event]))
        {
   
            self::{
   mathJaxContainer[2]}event] = array ();
        }
        if($first)
        {
   
            array_unshift(self::{
   mathJaxContainer[3]}event],$callback);
        }
        else 
        {
   
            self::{
   mathJaxContainer[4]}event][] = $callback;
        }
    }

    /**
     * 触发事件(监听事件)
     * 不是引用传参方式,如有需要请使用triggerReference方法
     * @param name $event           
     * @param boolean $once         
     * @return mixed
     */
    public static function trigger({
   mathJaxContainer[5]}params=array())
    {
   
        if (isset(self::{
   mathJaxContainer[6]}event]))
        {
   
            foreach (self::{
   mathJaxContainer[7]}event] as $item)
            {
   
                if(true === call_user_func({
   mathJaxContainer[8]}params))
                {
   
                    // 事件返回true时不继续执行其余事件
                    return true;
                }
            }
            return false;
        }
        return true;
    }
}

使用Event类监听一个事件

function addUser($userInfo)
{
   
    // 逻辑执行
    {
   mathJaxContainer[9]}db->execute('insert into tb_users(xxx)');

    // 事件触发
    Event::trigger('ON_USER_ADD',array('userInfo'=>{
   mathJaxContainer[10]}result));
}

在其它地方注册事件进行处理,事件名称是 ON_USER_ADD

Event::register('ON_USER_ADD',function($data){
   
    // 这里可以做一些事情
    var_dump($data);
});

其实原理很简单,就比如先挖个坑,然后再填进去。PHP中主要依靠 call_user_func 这类动态调用函数方法的函数来实现。

相关文章
|
安全 Java PHP
PHP/JAVA交易所系统开发(成熟案例)丨需求步骤丨指南详细丨方案逻辑丨逻辑教程丨源码功能
An exchange refers to an institution or platform that provides a centralized market for buying and selling transactions, where participants can trade various assets, such as securities, commodities, cryptocurrencies, etc. Exchanges provide market infrastructure and rules to facilitate compliant, saf
|
2月前
|
缓存 NoSQL PHP
使用PHP-redis实现键空间通知监听key失效事件的技术与代码示例
通过上述方法,你可以有效地在PHP中使用Redis来监听键空间通知,特别是针对键失效事件。这可以帮助你更好地管理缓存策略,及时响应键的变化。
92 3
|
3月前
|
安全 BI PHP
php前后端分离,仓储模式r的医院不良事件上报系统源码
此医院安全不良事件管理系统采用前后端分离架构(PHP+Laravel8+Vue2+Element),实现事件上报至解决的全流程管理。系统支持结构化上报、数据自动引用、智能流程及预警,配备质控分析工具生成各类报表。通过PDCA闭环管理,确保事件得到有效处置并预防再发,同时提供便捷上报通道,优化上报效率。
php前后端分离,仓储模式r的医院不良事件上报系统源码
|
4月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
33 1
|
6月前
|
安全 前端开发 PHP
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
医疗安全不容忽视! 医疗不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
60 1
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
|
6月前
|
监控 安全 前端开发
PHP基于B/S版 医院不良事件管理系统源码vscode+laravel8医院如何加强不良事件上报系统的管理 AEMS系统源码
医院安全(不良)事件管理AEMS系统构建全院人员,在医疗、环境、设备、服务及相关制度体系运行过程中,发现存在的不良、隐患事件,能够以匿名、实名方式主动、方便、快捷的上报、反馈。
67 6
|
6月前
|
存储 安全 前端开发
PHP医院安全不良事件管理系统源码(AEMS)前端vue2+element+后端laravel8不良事件上报与闭环管理
医院不良事件上报与管理系统结合现代医院管理思路,遵照PDCA全面质量循环管理方法而设计,并在多家大型三甲医院成熟运用。系统从事件上报、基于人、机、料、法 、环的RCA分析、事件整改、效果评估实现了结构化、标准化、智能化的管理和分析,满足医院可追溯化、全流程闭环管理要求,满足等级医院评审细则要求,大力提高医院不良事件上报的效率,保障事件分析的准确性,促进医疗安全的提高,避免同类事件再次发生,改善整个医院医疗安全,从而实现医院安全医疗的目标。
79 3
|
6月前
|
人工智能 安全 前端开发
PHP医疗不良事件上报系统源码 AEMS 医院安全(不良)事件报告系统源码 可提供演示
根据报告系统主体和适用范围;根据所报告事件强制性要求 分为自愿报告系统和强制报告系统。强制报告系统主要定义为严重的、可预防的护理差错和可以确定的不良事件,几乎所有医院的护理主管部门都制订了不良事件上报制度,以便有效地分析事件原因。自愿报告系统是强制报告系统的补充,要求和鼓励护理主管部门或个人自愿上报不 良事件,更有助于发现组织系统的安全 隐患,加强护理安全管理。
65 4
|
6月前
|
监控 安全 PHP
采用PHP开发的不良事件管理系统源码vue2+element医院不良事件上报系统的意义 AEMS系统源码
不良事件管理系统(AEMS)是一种用于医疗行业的解决方案,它主要用于处理和管理临床不良事件。这些不良事件是指由医疗导致的伤害,与疾病的自然转归相反,可能延长病人的住院时间或导致残疾。AEMS的目标是揭示系统的不足与缺陷,减少不良事件对病人、家属、医护人员和医院声誉的影响。
53 1
|
6月前
|
存储 监控 安全
PHP医院安全(不良)事件报告系统源码 vue2+element支持11大类不良事件上报、审核处理、分析改进
医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件的情况,更好地掌握不良事件的发生趋势,为及时采取适当的管理措施和流程、制度改进提供了良好的量化依据。系统通过汇集不同类型事件的报告,从中分析出医院内部潜在的问题和风险,将发生的事故降到最低,从而保证病人安全和医护人员安全。
57 0