¿Cómo uso un método de clase como una función de callback?

Si uso array_walk dentro de una función de clase para llamar a otra función de la misma clase

 class user { public function getUserFields($userIdsArray,$fieldsArray) { if((isNonEmptyArray($userIdsArray)) && (isNonEmptyArray($fieldsArray))) { array_walk($fieldsArray, 'test_print'); } } private function test_print($item, $key) { //replace the $item if it matches something } } 

Me da el siguiente error:

Advertencia: array_walk() [function.array-walk]: no se puede llamar a test_print() – la función no existe en …

Entonces, ¿cómo especifico $this->test_print() mientras uso array_walk() ?

Si desea especificar un método de clase como una callback, debe especificar el objeto al que pertenece:

 array_walk($fieldsArray, array($this, 'test_print')); 

Del manual :

Un método de un objeto instanciado se pasa como una matriz que contiene un objeto en el índice 0 y el nombre del método en el índice 1.

Visite http://www.ideone.com/oz3Ma para ver esto en acción.

Si necesita llamar a un método estático sin crear una instancia de la clase, puede hacerlo:

 // since PHP 5.3 array_walk($fieldsArray, 'self::test_print'); 

O desde afuera:

 // since PHP 5.5 array_walk($fieldsArray, User::class.'::test_print'); 

Para llamar a un método de clase como una función de callback en otro método de clase, debe hacer:

 public function compareFucntion() { } public function useCompareFunction() { usort($arrayToSort, [$this, 'compareFucntion']) }