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)