2014-12-08 3 views
1

usort()을 사용하여이 시나리오에서 부모 클래스의 메서드에 액세스 할 수 있습니까?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()에 액세스 할 수 있으리라 믿고있어. 이 일을 할 수있는 방법이 있습니까?

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 
    } 
} 

제작 한 : 도움이된다면 내가

답변

3

는 익명 함수에 외부 범위의 변수에 액세스하려면 ... 정적 함수에 그 방법을 설정할 수 있습니다, 당신은 use 선언을 사용할 필요가 이전 버전의 PHP에서는 클로저에서 $this에 액세스 할 수 없으므로 지역 변수 $self을 사용합니다.

+0

쿨, 고마워! 내가 찾던 바로 그거야. –

+0

좋은 대체 'PHP. 렉시 컬 범위는 없지만 어딘가에 보입니다 : 클로저. – amphetamachine

관련 문제