una - funciones php return
¿Cómo uso un método de clase como una función de devolución de llamada? (3)
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 atest_print()
- la función no existe en ...
Entonces, ¿cómo especifico $this->test_print()
mientras uso array_walk()
?
Para llamar a un método de clase como una función de devolución de llamada en otro método de clase, debe hacer:
public function compareFucntion() {
}
public function useCompareFunction() {
usort($arrayToSort, [$this, ''compareFucntion''])
}
Si desea especificar un método de clase como una devolución de llamada, 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'');