Argumentos de funções

Informações podem ser passadas para funções através da lista de argumentos, que é uma lista de variáveis e/ou constantes delimitados por vírgulas.

O PHP suporta a passagem de argumentos por valor (o padrão), passagem por referência e valores padrão de argumento. Listas de argumentos de comprimento variável são suportadas apenas no PHP4 e posterior; veja Número de argumentos variável e as referências das funções func_num_args(), func_get_arg() e func_get_args() para mais informações. Um efeito similar pode ser atingido no PHP 3 pela passagem de um array de argumentos para uma função:

Exemplo 17-4. Passando arrays para funções

<?php
function takes_array($input)
{
    echo
"$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>

Fazendo argumentos serem passados por referência

Por padrão, argumentos de função são passados por valor (de forma que se você mudar o valor do parâmetro dentro da função, ele não é alterado fora da função). Se você deseja permitir que uma função modifique seus argumentos, você precisa passá-los por referência.

Se você quer que um argumento para uma função sempre seja passado por referência, você pode preceder o nome do argumento com um "e comercial" (&) na definição da função:

Exemplo 17-5. Passando parâmetros de função por referência

<?php
function add_some_extra(&$string)
{
    
$string .= ' e alguma coisa mais.';
}
$str = 'Isto é uma string,';
add_some_extra($str);
echo
$str;    // imprime 'Isto é uma string, e alguma coisa mais.'
?>

Valores padrão de argumentos

Uma função pode definir valores padrão no estilo C++ para argumentos escalares, como a seguir:

Exemplo 17-6. Utilizando parâmtros default em funções

<?php
function cafeteira ($tipo = "cappuccino")
{
    return
"Fazendo uma xícara de café $type.\n";
}
echo
cafeteira ();
echo
cafeteira ("expresso");
?>

A saída do código acima será:

Fazendo uma xícara de café cappucino.
Fazendo uma xícara de café expresso.

O valor padrão precisa ser uma expressão constante, não (por exemplo) uma variável, um membro de classe ou uma chamada de função.

Note que usando argumentos padrão, qualquer padrão deve vir após os argumentos sem padrão: caso contrário, as coisas não funcionarão como esperado. Considere o seguinte trecho de código:

Exemplo 17-7. Uso incorreto de parâmetros de função default

<?php
function iogurtera ($tipo = "azeda", $sabor)
{
    return
"Fazendo uma taça de $tipo $sabor.\n";
}

echo
iogurtera ("framboesa");   // não funciona como esperado
?>

A saída do exemplo acima é:

Warning: Missing argument 2 in call to iogurtera() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Fazendo uma taça de framboesa.

Agora, compare o que está acima com este:

Exemplo 17-8. Uso correto de parâmetros de função default

<?php
function iogurtera ($sabor, $tipo = "azeda")
{
    return
"Fazendo uma taça de $tipo $sabor.\n";
}

echo
iogurtera ("framboesa");   // funciona
?>

A saída deste exemplo é:

Fazendo uma taça de framboesa azeda.

Número variável de argumentos

O PHP4 tem suporte para um número variável de argumentos nas funções definidas pelo usuário. Isto é realmente bem fácil, usando as funções func_num_args(), func_get_arg() e func_get_args().

Nenhuma sintaxe especial é requerida, e a lista de argumentos ainda pode ser fornecida explicitamente com as definições de funções e se comportarão normalmente.