Argumentos de funções

Informação pode ser passada 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 posteriores; veja Listas de argumentos de comprimento variável e as referências de função de func_num_args(), func_get_arg(), e func_get_args() para mais informações. Um efeito similar pode ser atingido no PHP3 pela passagem de uma matriz de argumentos para uma função:


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 argumento dentro da função, ele não é mudado 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:


function add_some_extra(&$string) {
    $string .= 'e algo mais.';
}
$str = 'Isto é uma string, ';
add_some_extra($str);
echo $str;    // outputs 'Isto é uma string, e algo mais.'
      

Se você deseja passar uma variável por referência a uma função que não faz isto por padrão, você pode preceder o nome do argumento com um "e comercial" na chamada da função:


function foo ($bar) {
    $bar .= ' e algo mais.';
}
$str = 'Isto é uma string, ';
foo ($str);
echo $str;    // outputs 'Isto é uma string, '
foo (&$str);
echo $str;    // outputs 'Isto é uma string, e algo mais.'
      

Valores padrão de argumentos

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


function makecoffee ($type = "cappucino") {
    return "Fazendo uma xícara de $type.\n";
}
echo makecoffee ();
echo makecoffee ("café expresso");
      

The output from the above snippet is:

Fazendo uma xícara de 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 ou um membro de classe.

Note que usando argumentos padrão, qualquer padrão dever estar do lado direito de argumentos não-padrão; caso contrário, as coisas não funcionarão como esperado. Considere o seguinte trecho de código:


function makeyogurt ($type = "azeda", $flavour) {
    return "Fazendo uma taça de $flavour $type.\n";
}
 
echo makeyogurt ("framboesa");   // não vai funcionar como o esperado
      

A saída do exemplo acima é:

Warning: Missing argument 2 in call to makeyogurt() 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:


function makeyogurt ($flavour, $type = "azeda") {
    return "Fazendo uma taça de $flavour $type.\n";
}
 
echo makeyogurt ("framboesa");   // funciona como o esperado
      

A saída deste exemplo é:

Fazendo uma taça de framboesa azeda.
     

Listas de argumentos de comprimento variável

O PHP4 tem suporte para listas de argumentos de comprimento variável 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 as listas de argumentos ainda podem ser fornecidas explicitamente com as definições de funções e se comportarão normalmente.