Hoje vou mostrar pra vocês como é facil criar uma função que aceite um número indeterminado de argumentos, é o mesmo caso das funções min() e max(), onde você pode passar 1, 2 ou 200 argumentos e ela irá funcionar perfeitamente.
O ponto-chave desse tipo de função é o uso de duas outras funções nativas do PHP, são elas: func_num_args() e func_get_args().
A função func_num_args() (quando usada dentro de uma outra função) retorna o número de argumentos que foram passados para essa função. E a função func_get_args() retorna uma lista (array) com os argumentos que foram passados para essa função.
Vamos criar uma função para calcular a média de uma quantiade qualquer de números:
<?php
/**
* Função que calcula a média de N números
*/
function media() {
}
?>
Perceba que, na definição da função, não colocamos nada no lugar dos parâmetros/argumentos que ela necessita… Exatamente por que a quantidade de argumentos será variável.
Agora vamos pegar o total e a lista de argumentos passados para a função:
// Total de argumentos passados $total = func_num_args(); // Array com cada um dos argumentos passados $numeros = func_get_args();
Feito isso, vamos precisar fazer uma verificação, só por segurança, da quantidade de argumentos passados… Não há lógica em tentar calcular a média de 0 numeros, não é mesmo?
// Verifica se foi passado pelo menos 1 número
if ($total < 1) {
trigger_error('Não é possível calcular a média de menos de 1 número!');
return 0;
}
E por final, caso tenha sido passado pelo menos um argumento, calculamos a somatória dos números e retornamos a média:
} else {
// Calcula a somatória de todos os números passados
$soma = array_sum($numeros);
// Retorna a média dos números
return ($soma / $total);
}
No final das contas, nossa função ficou assim:
<?php
/**
* Função que calcula a média de N números
* @author Thiago Belem <contato@thiagobelem.net>
*/
function media() {
// Total de argumentos passados
$total = func_num_args();
// Array com cada um dos argumentos passados
$numeros = func_get_args();
// Verifica se foi passado pelo menos 1 número
if ($total < 1) {
trigger_error('Não é possível calcular a média de menos de 1 número!');
return 0;
} else {
// Calcula a somatória de todos os números passados
$soma = array_sum($numeros);
// Retorna a média dos números
return ($soma / $total);
}
}
?>
O uso dela é bem simples:
<?php echo media(2, 6, 10); // 6 echo media(1); // 1 echo media(1, 7, 2.1, 5.3214, 9, 10000); // 1670.7369 ?>
Espero que tenham gostado! Até a próxima! :]
Você também vai gostar de ler:
- Criando funções no PHP
- Criando índices textuais
- Apredendo a usar as funções empty e isset
- Calculando o próximo dia útil de uma data
- Gerando senhas aleatórias com PHP
Com as tags Average, Funções, Functions, Lógica, Max, Média, Parâmetros, PHP, Scripts, Segurança
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:
