这似乎很简单,但下面的代码给出了以下错误。有什么建议?
usort()期望参数2是有效的回调,函数' cmp'不 找到或无效的功能名称
我的代码:
function cmp($item1, $item2) {
return strcmp(strtolower($item1->last_name), strtolower($item2->last_name));
}
public function get_people() {
usort($this->my_array, 'cmp');
}
答案 0 :(得分:1)
由于您使用$this->my_array
并且该函数具有关键字public,我将假设这两个方法都在类定义中,因此您还必须定义,您要调用类方法和不是正常的功能。
这意味着你必须改变:
usort($this->my_array, 'cmp');
为:
usort($this->my_array, [$this, 'cmp']);
//^^^^^ So it will call the class method and not a normal global function
答案 1 :(得分:1)
看来你在课堂上有这个,所以有两种方法可以做到这一点。
第一种方式,通过告诉它当前类中存在方法
public function get_people() {
usort($this->my_array, array($this, 'cmp'));
}
第二种方式,使用闭包
public function get_people() {
usort($this->my_array, function($item1, $item2) {
return strcmp(strtolower($item1->last_name), strtolower($item2->last_name));
});
}
我个人更喜欢闭包方式,因为此功能仅供此排序功能使用。
答案 2 :(得分:0)
是的,你在课堂上。有很多方法可以使用类或对象函数进行回调,请参阅PHP manual。例如:
public function get_people() {
usort($this->my_array, array($this, 'cmp'));
}