Если я использую 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']) }