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:
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:
Uma função pode definir valores padrão no estilo C++ para argumentos escalares, como a seguir:
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:
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:
A saída deste exemplo é:
Fazendo uma taça de framboesa azeda. |
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.