在php中使用callable
我试图在下面的实现中模仿php内置的usort函数定义:在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
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声明的类型在其版本中不存在,错误只会引用您输入的任何伪类型。