IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    PHP 8 的  is_callable() 在检查一个类名与非静态方法时将返回失败

    Denis | 邓鸿华发表于 2024-01-17 15:17:33
    love 0

    最近和大胡子在紧锣密鼓准备新的企业主题,这是一款可以完全自定义页面模块的主题,先给大家看下定制出来的首页,这是一个挖掘机的官网,你换一下图片和布局,也可以定制出其他类型的官网。😎

    本来周一就准备发了,但是因为完全的自定义,所以我们需要更多时间去去做个钟测试,其中的一项就是看看在各个 PHP 版本中有没有问题。

    然后就发现 #WPJAM Basic# 的一个重大 bug,就是后台文章和分类列表的一些操作无效了,怎么点击保存都无效,经过一个我下午的 Debug 这是因为 PHP 8 对 is_callable() 函数的一个改动造成的。

    简单说因为 PHP 8 不再允许通过静态调用的方式去调用非静态方法。因此 is_callable() 在检查一个类名与非静态方法时将返回失败(应当检查一个类的实例)。具体看下面这个例子就大概能够明白了:

    class Test{
        public function method1() { }
        public static function method2() { }
    }
    
    // PHP 8 之前
    var_dump(is_callable(['Test', 'method1']));	// bool(true)
    var_dump(is_callable(['Test', 'method2']));	// bool(true)
    
    // PHP 8 之后
    var_dump(is_callable(['Test', 'method1']));	// bool(false)
    var_dump(is_callable(['Test', 'method2']));	// bool(true)
    var_dump(is_callable([new Test, 'method1']));	// bool(true)

    所以在主题发布之前,我首先就要发布一个 #WPJAM Basic# 的新版来解决这个,大家也可以更新,如果你还有 PHP 8 版本兼容的问题,也可以向我们提出,虽然我已经做了很多的兼容了。

    © WordPress果酱 / RSS 订阅 / 长期承接 WordPress 项目



沪ICP备19023445号-2号
友情链接