将函数名称作为回调传递在我的班级中没有按预期工作

时间:2015-06-09 14:47:06

标签: php function class callback

这似乎很简单,但下面的代码给出了以下错误。有什么建议?

  

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');
}

3 个答案:

答案 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'));
  }