专栏首页宣言(Siam)博客swoole,swoole_timer_tick() must be callable, array given 报错异常

swoole,swoole_timer_tick() must be callable, array given 报错异常

报错提示

Fatal error: Uncaught TypeError: Argument 2 passed to Swoole\Timer::swoole_timer_tick() must be callable, array given

触发场景

在easyswoole旧版的Component组件中的Pool抽象方法(用于实现通用连接池),有一行代码是

if ($conf->getIntervalCheckTime() > 0) {
    swoole_timer_tick($conf->getIntervalCheckTime(), [$this, 'intervalCheck']);
}

定时触发这个检查方法,来完成最小连接池保持、掉线检测等操作。

于是就在这里产生了这个异常

解决问题

搜索了php官方对于callable的定义, 是允许数组这种形式传递的 https://www.php.net/manual/zh/language.types.callable.php

咨询swoole开发组的成员twosee,也反馈这个类型判断是调用zendapi完成的,理论不应该出问题

给出的解决方案是使用php推荐新增的Closure

if ($conf->getIntervalCheckTime() > 0) {
    swoole_timer_tick($conf->getIntervalCheckTime(), \Closure::fromCallable([$this, 'intervalCheck']));
}

easyswoole框架内部交流后也说明这个问题是由于swoole版本变动,很早以前就在新版做了兼容(将intervalCheck改为public方法)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP数组排序 解决数值型版本号排序错乱

    本人在写EasySwoole新的组件时,使用到了插件思维,所以需要做包的解析等逻辑。在解析下列版本解析时,发现一些小问题。做个记录。

    宣言言言
  • 宝塔面板多PHP版本中编译安装升级Swoole

    今天在使用最新版easyswole框架的过程中,需要依赖的swoole版本必须>= 4.2.13,到2019-2-25,宝塔面板能支持安装的swoole版本只有...

    宣言言言
  • 对象池、连接池的意义

    这次我们来讲讲对象池、连接池的意义,在此之前我们先了解学习一些其他的基础知识,以便我们结合理解池的意义。

    宣言言言
  • 强类型与弱类型语言关于存取对象(数据)的问题

    在旧的业务流程加入一个“拦截”,原来从前端表单提交到后台的处理逻辑延后处理,本质上是一个异步化的处理过程。 此时将表单参数存储到数据库,在适当的时刻“拦截”结束...

    用户3579639
  • RocketMQ主从读写分离机制

    RocketMQ 的读写分离机制又跟上述描写的不太一致,RocketMQ 有属于自己的一套读写分离逻辑,它会判断主服务器的消息堆积量来决定消费者是否向从服务器拉...

    张乘辉
  • Thinking In Java 第一章笔记

    人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。这里的类型是指“所抽象的是什么。”

    用户6203048
  • Windows Server 2008 R2 搭建微信小程序

    注意哦~,Windows Server 2003不能部署微信小程序哦~,想要部署小程序请升级2008 R2及以上版本。 买在国内的云服,Windows 和 Li...

    赵腰静
  • 2018 05 09

    顾名思义就是只能有一个,不能在出现第二个。就如同地球上没有两片完全一模一样的树叶一样。

    用户2145987
  • LeetCode刷题DAY 5:只出现一次的数字

    给定一个非空整数数组,只有一个数字出现一次,其余出现两次,找出只出现一次的数字。如输入[3,4,5,4,3],输出5。

    三猫
  • Jsp和Servlet有什么区别?

    Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的se...

    李红

扫码关注云+社区

领取腾讯云代金券