Как использовать метод класса в качестве функции обратного вызова?

Если я использую array_walk внутри функции класса для вызова другой функции того же класса

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

Это дает мне следующую ошибку:

Предупреждение: array_walk() [function.array-walk]: test_print() вызвать test_print() – функция не существует в …

Итак, как мне указать $this->test_print() при использовании array_walk() ?

Если вы хотите указать метод класса в качестве обратного вызова, вам необходимо указать объект, к которому он принадлежит:

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

Из руководства :

Метод объекта-объекта передается как массив, содержащий объект с индексом 0 и имя метода в индексе 1.

Ознакомьтесь с http://www.ideone.com/oz3Ma, чтобы увидеть это в действии.

Если вам нужно вызвать статический метод без создания экземпляра класса, вы можете сделать это:

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

Или снаружи:

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

Чтобы вызвать метод класса как функцию обратного вызова в другом методе класса, вы должны сделать следующее:

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