在usort函数中访问父类范围

时间:2014-12-08 21:44:48

标签: php class scope

是否可以使用usort()

访问此方案中的父类方法
class MyClass {    
    public function isGreater($old,$new){
        return ($new - old > 0) ? true : false;
    }

    public function load($data){
        usort($data,function($a,$b){
            return $this->isGreater($a,$b) ? 1 : -1; // THIS IS THE PROBLEM LINE
        }
    }
}

我假设因为usort使用自己的函数范围,我无法访问公共方法isGreater()。有没有办法做到这一点?如果它有帮助,我可以将该方法转换为静态函数...

1 个答案:

答案 0 :(得分:4)

要在匿名函数中访问外部作用域中的变量,您需要使用use声明:

public function load($data){
    $self = $this;
    usort($data,function($a,$b) use ($self){
        return $self->isGreater($a,$b) ? 1 : -1; // THIS IS THE PROBLEM LINE
    }
}

我创建了一个本地变量$self,因为旧版本的PHP不允许在闭包中访问$this