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

最近在 PHP 8 环境下发现 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)

©我爱水煮鱼,本站推荐使用的主机:阿里云,国外主机建议使用BlueHost

本站长期承接 WordPress 优化建站业务,请联系微信:「chenduopapa」。