是否可以使用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()
。有没有办法做到这一点?如果它有帮助,我可以将该方法转换为静态函数...
答案 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
。