2013-01-20 2 views
0

나는 다음과 같은 코드가 있습니다이 콜백 함수가 작동하지 않는 이유는 무엇입니까?

public function compareObjects($object1, $object2){ 
    return $object1->id - $objects2->id 
} 

$diff = array_udiff($array1, $array2, 'compareObjects'); 

을하지만

은 내가이 권리를했다 생각 .... 방법이 존재하지 않는 비교하거나 잘못된 함수 이름이라고 말을 계속?

답변

3

인스턴스화 된 객체의 메소드는 인덱스 1

// Functions 
$diff = array_udiff($array1, $array2, 'compareObjects'); 

// Object methods 
$diff = array_udiff($array1, $array2, array($this, 'compareObjects')); 
// -OR- 
$diff = array_udiff($array1, $array2, array($my_obj, 'compareObjects')); 


// Static class methods 
$diff = array_udiff($array1, $array2, 'some_class::compareObjects'); // PHP 5.2.3+ 

PHP: Callbacks

에서 인덱스 0 객체와 메소드 이름을 포함하는 배열로 전달
0

클래스 메소드가 아닌 순수한 함수를 찾고 있습니다. 클래스 메소드를 호출 할 때와 마찬가지로 $this을 사용해야합니다.

당신은이 작업을 수행 할 필요가 ...

$diff = array_udiff($array1, $array2, array($this, 'compareObjects')); 

과 마찬가지로, 당신은 클래스의 외부에서 그것을 사용하는 경우,이처럼 사용할 필요가 ...

$objRandom = new Whatever; 
// do some fancy PHP stuff, or not 
$diff = array_udiff($array1, $array2, array($objRandom, 'compareObjects')); 

이것은 거의 PHP 함수를 콜백 함수/메소드와 함께 사용하는 방법입니다.

관련 문제