Em Busca da “Zend PHP Yellow Pages”
Funções – Parte V – Comprimento variável da lista de argumentos
Um erro comum quando declarar uma função é a de escrever o seguinte:
function f ($opcional = “null”, $requerido)
{}
Isto não vai provocar alerta de erros, mas também não faz qualquer sentido, porque você nunca será capaz de omitir o primeiro parâmetro ($opcional) se você deseja especificar o segundo, e você não pode omitir o segundo, porque o PHP irá emitir um aviso.
Neste caso, o que você realmente quer é comprimento variável da lista de argumentos, ou seja, a capacidade de criar uma função que aceita um número variável de argumentos, dependendo sobre a circunstância. Um exemplo típico deste comportamento é exibido pela família de funções printf().
PHP fornece três funções internas para lidar com comprimento variável da lista de argumentos:
func_num_args(), func_get_arg() e func_get_args(). Aqui está um exemplo de como elas são utilizadas:
function ola()
{
if (func_num_args() > 0) {
$arg = func_get_arg(0); // O primeiro argumento é a posição 0
echo “Olá $arg”;
} else {
echo “Olá Mundo”;
}
}
ola(“Leitor”); // Exibe “Olá Leitor”
ola(); // Exibe “Olá Mundo”
Você pode usar o comprimento variável da lista de argumentos mesmo se você especificar argumentos no cabeçalho da função. No entanto, isso não irá afetar a forma como o comprimento variável da lista de argumentos irá se comportar, por exemplo, func_num_args() ainda retornará o número total de argumentos passados para a função, ambos declarados e anônimos.
function contarTodos($arg1)
{
if (func_num_args() == 0) {
die(“Você precisa especificar pelo menos um argumento.”);
} else {
$args = func_get_args(); // Retorna um array de argumentos
array_shift($args); // Remove o argumento definido no inicio.
$count = strlen ($arg1);
foreach ($args as $arg) {
$count += strlen($arg);
}
}
return $count;
}
echo contarTodos(“um”, “dois”, “três”); // Exibe ’10’
Observação importante:
É muito importante ter em mente que o comprimento variável da lista de argumentos estão cheios de potenciais armadilhas, enquanto eles são muito poderosos, eles tendem a tornar o código confuso, porque é quase impossível de se prever casos de teste global se uma função que aceita um número variável de parâmetros não é construído adequadamente.
| Print article | This entry was posted by Filippe on 9 de February de 2010 at 11:39, and is filed under funções. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |