If I use array_walk
inside a class function to call another function of the same class
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
}
}
It gives me the following error -
Warning: array_walk()
[function.array-walk]: Unable to call
test_print()
- function does not exist in ...
So, how do I specify $this->test_print()
while using array_walk()
?
If you want to specify a class method as a callback, you need to specify the object it belongs to:
array_walk($fieldsArray, array($this, 'test_print'));
From the manual:
A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.
If you need to call a static method without instantiating the class you could do so:
// since PHP 5.3
array_walk($fieldsArray, 'self::test_print');
Or from outside:
// since PHP 5.5
array_walk($fieldsArray, User::class.'::test_print');
To call a class method as a callback function in another class method, you should do :
public function compareFucntion() {
}
public function useCompareFunction() {
usort($arrayToSort, [$this, 'compareFucntion'])
}