Publicidade (Anuncie Aqui)

Criando funções que aceitem N argumentos

Criando funções que aceitem N argumentos

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:

Postado em PHP, Tutoriais

Com as tags , , , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

  • Muito bom saber sobre as funções func_num_args() e func_get_args(). Muitas possibilidades com essas duas..
  • Nossa... nao conhecia o funcionamento do func_num_args() e do func_get_args(), muito legal a explicação
blog comments powered by Disqus