Menu

Funções em PHP: definir, retorno, parâmetros e tipos

Defina uma função PHP com function name($param) { return $value; }. Veja valores de retorno, parâmetros padrão, argumentos nomeados, passagem por referência, declarações de tipo com strict_types, tipos nullable e union e variádicos ...$args.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Uma função PHP é definida com a palavra-chave function, um nome, uma lista de parâmetros e um corpo; return devolve um valor a quem chamou. function add(int $a, int $b): int { return $a + $b; } a define, e add(2, 3) a chama e retorna 5.

Os string e int antes dos parâmetros são declarações de tipo, e : string depois dos parênteses é o tipo de retorno. Os dois são opcionais, mas pegam erros cedo e documentam o que a função espera.

Valores de retorno e retornar vários valores

return encerra a função na hora. Uma função sem return, ou com um return; sozinho, retorna null; declare : void quando ela é chamada só pelo efeito. Uma função retorna um valor, mas esse valor pode ser um array, que você desestrutura do lado de quem chama:

Veja desestruturação de arrays para as outras formas de [...] =.

Parâmetros padrão e argumentos nomeados

Um parâmetro com = value é opcional: quem chama pode omiti-lo. Parâmetros opcionais vêm depois dos obrigatórios. Desde o PHP 8.0, argumentos nomeados deixam quem chama passar qualquer parâmetro pelo nome, então você pode pular os opcionais de que não precisa.

Argumentos nomeados também deixam legíveis as chamadas a funções nativas: str_pad('7', 3, '0', pad_type: STR_PAD_LEFT). O nome do parâmetro passa a fazer parte da interface pública da função, então renomear um parâmetro pode quebrar quem usa os nomes.

Passagem por referência

Normalmente o PHP passa uma cópia de cada argumento, então a função não pode alterar a variável de quem chamou. Um & antes de um parâmetro passa a própria variável. Funções nativas como sort() funcionam assim.

Retornar um novo valor costuma ser mais claro que alterar um argumento. Use referências quando a função realmente deve modificar algo no lugar.

Declarações de tipo e strict_types

Por padrão, o PHP converte os argumentos para o tipo declarado quando consegue: add("5", 3) transforma "5" em 5. Colocar declare(strict_types=1); bem no topo do arquivo desliga isso para as chamadas feitas naquele arquivo, então um tipo errado lança um TypeError em vez de ser convertido.

Sem a linha do declare, a mesma chamada imprime 8. Strings que não são números, como "five", lançam um TypeError nos dois modos.

Os tipos que você pode declarar para parâmetros e valores de retorno:

never é um tipo de retorno para funções que sempre lançam exceção ou encerram o script. Nomes de classes e interfaces também funcionam como tipos.

Número variável de argumentos com ...$args

...$numbers reúne qualquer quantidade de argumentos num array. O mesmo ... do lado de quem chama espalha um array em argumentos separados.

Usar uma variável de fora dentro de uma função

Uma função tem o próprio escopo. Uma variável definida fora dela não é visível dentro, o que surpreende quem vem do JavaScript:

<?php
$taxRate = 0.2;

function priceWithTax(float $price): float
{
    return $price * (1 + $taxRate);   // $taxRate is undefined here
}
Warning: Undefined variable $taxRate in /path/to/index.php on line 6

e a função retorna o preço sem imposto. Passe o valor como parâmetro. Isso deixa a função honesta sobre aquilo de que depende e fácil de testar:

A palavra-chave global também funciona, mas esconde a dependência; o escopo de variáveis a explica. Para funções curtas passadas a outras funções, como callbacks para o array_map(), veja funções anônimas, que podem capturar variáveis de fora com use.

Perguntas frequentes

Como defino uma função no PHP?

Use a palavra-chave function, um nome, parâmetros entre parênteses e um corpo: function add(int $a, int $b): int { return $a + $b; }. Chame como add(2, 3). Nomes de funções não diferenciam maiúsculas de minúsculas, e uma função definida no nível superior de um arquivo pode ser chamada antes da linha que a define.

Como retorno vários valores de uma função PHP?

Retorne um array e desestruture: function minMax(array $a): array { return [min($a), max($a)]; } e depois [$min, $max] = minMax([3, 1, 4]);. Para resultados com nome, retorne um array associativo e use ['min' => $min] = ....

O que faz declare(strict_types=1)?

Ele desliga a conversão automática de tipos nas chamadas feitas naquele arquivo, então passar "5" para um parâmetro int lança um TypeError em vez de convertê-lo em 5. Precisa ser a primeira instrução do arquivo e só afeta aquele arquivo.

O que são argumentos nomeados no PHP?

Desde o PHP 8.0 você pode passar argumentos pelo nome do parâmetro: htmlspecialchars($s, double_encode: false). Eles podem vir em qualquer ordem depois dos posicionais e permitem pular parâmetros opcionais que você não quer mudar.

Como passo uma variável por referência no PHP?

Coloque & antes do parâmetro: function addOne(int &$n): void { $n++; }. A função então altera a variável de quem chamou. Sem &, o PHP passa uma cópia e a variável de quem chamou continua igual.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR