tp5模型事件回调函数中不能使用$this

tp5模型事件回调函数中不能使用$this,使用会报错,涉及到数据库操作使用Db类,不能使用$this->save()之类的方式

如果回调函数中需要使用类内函数,需要将函数定义为static,通过self::调用

给个例子:分类删除前删除该分类的子分类

public static function init(){

        self::event('before_delete', function ($data) {

            $sonids=self::getid($data['cate_id']);
            Db::table('sp_cate')->where(['cate_id'=>$sonids])->delete();

        });
    }


//获取下级分类id
    static public function getid($pid){
        static $ids=array();
        $res= Db::table('sp_cate')->where('cate_pid',$pid)->field('cate_id')->select();
        if($res!=null){
            foreach ($res as $v){
                if($v!=''){
                    $ids[]=$v['cate_id'];
                    self::getid($v['cate_id']);
                }

            }
        }
        return $ids;


    }

 

转载于:https://www.cnblogs.com/jcydd/p/10800808.html

### OSEK_TP 协议接收流控帧回调函数 在OSEK_TP协议中,当接收到流控帧时会触发特定的回调机制来处理该事件。通常情况下,这种回调由传输负责管理并调用应用程序注册过的相应接口[^1]。 对于OSEK_TP而言,在实现上一般通过定义一个专门用于响应流控消息到来的通知函数指针变量`TpFlowCtrlCallbackFuncType`来进行配置。此类型的原型如下所示: ```c typedef void (*TpFlowCtrlFrameIndication)(PduIdType TpSduId, FlowStatusType status); ``` 每当网络栈检测到一个新的流控指令到达之后就会执行上述声明形式所指向的实际逻辑体。这允许开发者自定义如何应对不同状态下的流量控制行为,比如继续发送数据、暂停一段时间后再尝试重传等操作[^2]。 具体来说,应用可以提供自己的版本给下调用以便于灵活调整通信策略;而底则只需按照既定流程完成必要的参数传递即可达成协作目的。值得注意的是,为了确保整个过程顺利进行,必须事先设置好这些回调关系,并且保证在整个生命周期内保持有效连接[^3]。 #### 实现示例 下面是一个简单的例子展示了怎样创建以及使用这样的回调功能: ```c // 声明全局变量存储回调地址 static TpFlowCtrlFrameIndication g_TpFlowCtrlCb; void RegisterFlowControlHandler(TpFlowCtrlFrameIndication handler){ // 注册用户提供的处理器作为新的默认选项 g_TpFlowCtrlCb = handler; } void OnReceiveFlowControl(PduIdType id, FlowStatusType status){ if(g_TpFlowCtrlCb != NULL){ // 调用已登记的方法实例通知高有关当前状况的变化 g_TpFlowCtrlCb(id,status); } } ``` 在此基础上还可以进一步扩展其他特性,例如错误恢复机制或是并发访问保护措施等等,从而构建更加健壮可靠的系统架构[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值