Как использовать метод класса в качестве функции обратного вызова?
Если я использую 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()
- функция не существует в...
Итак, как мне указать $this->test_print()
при использовании array_walk()
?
Ответы
Ответ 1
Если вы хотите указать метод класса в качестве обратного вызова, вам нужно указать объект, которому он принадлежит:
array_walk($fieldsArray, array($this, 'test_print'));
Из руководства:
Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода с индексом 1.
Ответ 2
Если вам нужно вызвать статический метод без создания экземпляра класса, вы можете сделать это:
// since PHP 5.3
array_walk($fieldsArray, 'self::test_print');
Или снаружи:
// since PHP 5.5
array_walk($fieldsArray, User::class.'::test_print');
Ответ 3
Чтобы вызвать метод класса в качестве функции обратного вызова в другом методе класса, вы должны сделать:
public function compareFucntion() {
}
public function useCompareFunction() {
usort($arrayToSort, [$this, 'compareFucntion'])
}