Eu tenho o seguinte código:
function lower_than_10($i) {
return ($i < 10);
}
que posso usar para filtrar uma matriz como esta:
$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');
Como posso adicionar argumentos a lower_than_10 para que ele também aceite o número a ser verificado? Tipo, se eu tiver isso:
function lower_than($i, $num) {
return ($i < $num);
}
como chamá-lo de array_filter passando 10 para $ num ou qualquer outro número?
array_filter
? É simplesmente umcallable
; no caso acima, correspondendo a "Tipo 3: chamada de método de objeto"array(<instance>, <method-name>)
:, cf. PHP: Callbacks / Callables - Manual .se você usa php 5.3 e superior, pode usar closure para simplificar seu código:
fonte
use
palavra para fornecer parâmetros extras ao lambda. Obrigado por uma dica tão valiosa! :)No PHP 5.3 ou melhor, você pode usar um encerramento :
fonte
create_function()
.create_function()
está basicamenteeval()
com outro nome e é tão mau quanto. O uso deve ser desencorajado. A solução alternativa baseada em classe maluca dada na resposta aceita é uma solução melhor do que usarcreate_function()
neste caso.se precisar que vários parâmetros sejam passados para a função, você pode anexá-los à instrução de uso usando ",":
fonte
Em extensão à resposta de jensgram, você pode adicionar um pouco mais de magia usando o
__invoke()
método mágico.Isso permitirá que você faça
fonte
Isso permite que você filtre itens em matrizes multidimensionais:
fonte