Postagem

Aqui é onde faço postagens de coisas que acho interessante.

Função com número de argumento indefinido

Postagem do dia 02/06/2013 na categoria PHP



Vou monstrar como criar um função que receba zero ou vários argumentos.
Preciso criar uma função, não sei o número de argumentos que ela vai receber, pois ela pode não receber nenhum ou vários números...

No PHP é possível criar esse tipo de função, basta apenas não declarar o parà¢metro que ela vai receber e dentro da função usar duas outras funções,

func_num_args() Conta o número de parametros que foi passado:
func_get_args() Retorna um array com todos os parà¢metros passados

Agora vou mostrar um exemplo de uma função anônima que "soma números".


<?php
$sum = function ()
{
	// Pegando o total de argumentos passados
	$num = func_num_args();
		
	// Pegando todos os argumentos
	$args = func_get_args();

	// Caso o número de argumentos seja igual a zero, retorno zero
	// Senão retorno a soma dos numeros passados no arqumento	
	return ( $num === 0 ) ? 0 : array_sum( $args );	
};


Agora para usar essa função:

<?php
echo $sum(); // Imprime 0 na tela
echo $sum(5,5); // Imprime 10 na tela
echo $sum(5,5,8,512,364); // Imprime 894 na tela
echo $sum( -5, -50, 8 ); // Imprime -47 na tela
echo $sum( array( 1,5,9,7 ) ); // Imprime 0 na tela


Agora vou melhorar meu código, reduzir o tamanho da função.

Usei a função func_num_args() para pegar o número de argumentos e armazenei na variável $num. Agora vou retirar essa função e utilizar a função sum() do php para saber o número de argumentos passados.


<?php
$sum = function ()
{
	// Pegando todos os argumentos
	$args = func_get_args();

	// Caso o número de argumentos seja igual a zero, retorno zero
	// Senão retorno a soma dos numeros passados no arqumento	
	return ( sum( $args ) === 0 ) ? 0 : array_sum( $args );	
};


Agora para usar essa função:

<?php
echo $sum(); // Imprime 0 na tela
echo $sum(5,5); // Imprime 10 na tela
echo $sum(5,5,8,512,364); // Imprime 894 na tela
echo $sum( -5, -50, 8 ); // Imprime -47 na tela
echo $sum( array( 1,5,9,7 ) ); // Imprime 0 na tela


Veja que a altração na função não alterou seu funcionamento, a função ficou mais fácil de ser entendida e conseguimos economizar algumas linhas de código.

Observação: Utilizei função anônima por questão didática, portanto não é obrigatório criar uma função e armazenar numa variável.
Em determiinado momento passei um array de números para a função e ela retornou 0. Isso porque ela não sabe como tratar um argumento do tipo array. Portanto deixo para que você teste o código e implemente essa solução.



Deixe seus comentários abaixo: