definindo o escopo do array_map php
Pergunta
Olá a todos, eu uso array_map de vez em quando para escrever métodos recursivos.por exemplo
function stripSlashesRecursive( $value ){
$value = is_array($value) ?
array_map( 'stripSlashesRecursive', $value) :
stripslashes( $value );
return $value;
}
Pergunta:
digamos que quero colocar esta função em uma classe estática, como usaria array_map de volta ao escopo do método estático na classe como Sanitize::stripSlashesRecursive();Tenho certeza de que isso é simples, mas não consigo descobrir, olhei para o php.net também.
Solução
Ao usar um método de classe como um retorno de chamada para funções como array_map()
e usort()
, você deve enviar o retorno de chamada como matriz de dois valores. O segundo valor é sempre o nome do método como uma string. O 1º valor é o contexto (nome ou objeto de classe)
// Static outside of class context
array_map( array( 'ClassName', 'methodName' ), $array );
// Static inside class context
array_map( array( __CLASS__, 'methodName' ), $array );
// Non-static outside of object context
array_map( array( $object, 'methodName' ), $array );
// Non-static inside of object context
array_map( array( $this, 'methodName' ), $array );
Outras dicas
array_map
Leva um ligar de volta como seu primeiro parâmetro.
E um retorno de chamada para um método estático é escrito assim:
array('classname', 'methodname')
O que significa que, no seu caso específico, você usaria:
array_map(array('stripSlashesRecursive', ''), $value);
Para mais informações sobre retornos de chamada, veja esta seção do manual do PHP: Pseudotipos e variáveis usadas nesta documentação – retorno de chamada.
array_map( array('Sanitize', 'stripSlashesRecursive'), $value) ...