在php中使用callable

在php中使用callable,php,callable,Php,Callable,我试图在下面的实现中模仿php内置的usort函数定义: class heapSort { static function hsort(array &$array, callable $cmp_function){ // logic } } class utility{ static function mycomparator(){ // logic } } $array = array(5,3,8,1); $callba

我试图在下面的实现中模仿php内置的usort函数定义:

class heapSort {
    static function hsort(array &$array, callable $cmp_function){
       // logic
    }
}

class utility{
    static function mycomparator(){
        // logic
    }
}

$array = array(5,3,8,1);
$callback = array('utility','mycomparator');
heapSort::hsort($array, $callback);
虽然变量
$callback
是“可调用”的,但为什么会出现以下致命错误

传递给heapSort::hsort()的参数2必须是callable的实例


更具体地说,如何将
$variable
转换为可调用的?

可调用的
仅支持
PHP5.4
尝试改用
可调用的

static function hsort(array &$array, $cmp_function) {
    if (! is_callable($cmp_function))
        throw new InvalidArgumentException("Function not callable");
}

callable
直到5.4才是实际的类型,有关更多信息,请参阅,但您的代码似乎是正确的。这是什么版本的PHP?因为您的回调不是有效的,所以请尝试“utility::MyComperator”。而不是数组。在我自己的测试之后,我正要发布相同的代码。如果将原始代码从
callable$cmp_函数
更改为
potato$cmp_函数
,则会出现错误:
传递给heapSort::hsort()的参数2必须是potato的实例
。OP需要可调用。。您之所以会出现错误,是因为
potato
没有实现
\uuu invoke
参见potato示例的目的是说明问题不在于参数的类型不正确,而在于OP声明的类型在其版本中不存在,错误只会引用您输入的任何伪类型。