Declaração de Funções em PHP
Uma função em PHP é um bloco de código reutilizável que executa uma tarefa específica. Ela reduz duplicação, melhora legibilidade e facilita manutenção. A declaração básica usa a palavra-chave function, seguida pelo nome e parênteses.
function saudar() {
echo "Olá, mundo!";
}
saudar(); // Saída: Olá, mundo!
Nomes de funções devem ser descritivos, começar com letra ou underscore, e seguir a convenção camelCase ou snake_case. PHP não diferencia maiúsculas de minúsculas em nomes de funções, mas é boa prática manter consistência. Funções podem ser declaradas em qualquer lugar do script e chamadas após sua definição ou até mesmo antes (PHP faz parsing completo primeiro).
Parâmetros e Argumentos
Parâmetros Obrigatórios e Opcionais
Parâmetros são variáveis recebidas pela função. Você pode definir valores padrão, tornando-os opcionais. Argumentos são os valores passados na chamada da função.
function calcularDesconto($preco, $percentual = 10) {
$desconto = $preco * ($percentual / 100);
return $preco - $desconto;
}
echo calcularDesconto(100); // Usa percentual padrão: 90
echo calcularDesconto(100, 20); // Usa percentual 20: 80
Parâmetros com valores padrão devem estar sempre após parâmetros obrigatórios. Se você tentar inverter essa ordem, PHP lançará um erro fatal.
Type Hints e Validação
Type hints garantem que apenas tipos específicos sejam aceitos, aumentando a segurança do código. A partir do PHP 7, é possível declarar tipos explicitamente.
function somar(int $a, int $b): int {
return $a + $b;
}
echo somar(5, 3); // 8
echo somar(5.7, 3.2); // 8 (valores float são convertidos)
// somar("5", "3"); // Funciona: strings numéricas são convertidas
O modo strict (declare(strict_types=1)) força type coercion rigorosa no início do arquivo. Você também pode usar type hints para objetos, arrays e interfaces, criando código mais robusto e autodocumentado.
Parâmetros por Referência
Por padrão, PHP passa parâmetros por valor (cópia). Com referência (&), a função modifica a variável original.
function incrementar(&$numero) {
$numero++;
}
$x = 5;
incrementar($x);
echo $x; // 6 — a variável original foi modificada
Use referências com cautela, pois podem dificultar o rastreamento de mudanças. Preferencialmente, retorne o novo valor em vez de usar referências.
Retorno de Valores
Return e Tipos de Retorno
A instrução return encerra a função e devolve um valor ao chamador. Funções sem return explícito retornam null.
function obterIdade($anoNascimento) {
$anoAtual = date('Y');
return $anoAtual - $anoNascimento;
}
$idade = obterIdade(1990);
echo $idade; // Número correspondente ao ano atual menos 1990
Type hints para retorno melhoram clareza. Combine com parâmetros tipados para máxima robustez:
function processar(string $nome, int $idade): string {
if ($idade < 18) {
return "Menor de idade";
}
return "Bem-vindo, $nome!";
}
echo processar("Ana", 25); // Bem-vindo, Ana!
Retornando Múltiplos Valores
Quando precisa retornar múltiplos valores, use arrays ou objetos. A desestruturação de arrays (PHP 7.1+) torna isso elegante.
function dividirnome($nomeCompleto) {
$partes = explode(" ", $nomeCompleto);
return [
'primeiro' => $partes[0] ?? '',
'ultimo' => end($partes) ?? ''
];
}
['primeiro' => $f, 'ultimo' => $u] = dividirnome("João Silva");
echo "$f - $u"; // João - Silva
Alternativamente, retorne um objeto para melhor legibilidade em estruturas complexas:
function validarEmail($email): object {
$valido = filter_var($email, FILTER_VALIDATE_EMAIL);
return (object)[
'valido' => (bool)$valido,
'mensagem' => $valido ? 'Email válido' : 'Email inválido'
];
}
$resultado = validarEmail("usuario@exemplo.com");
echo $resultado->mensagem; // Email válido
Funções Avançadas
Argumentos Variáveis
Use ... (splat operator) para aceitar número indefinido de argumentos:
function somar(...$numeros) {
return array_sum($numeros);
}
echo somar(1, 2, 3, 4, 5); // 15
echo somar(10, 20); // 30
Funções Anônimas e Arrow Functions
Funções anônimas são úteis em callbacks. Arrow functions (PHP 7.4+) oferecem sintaxe mais concisa:
$nomes = ['Ana', 'Bruno', 'Carlos'];
// Anônima
$maiusculas = array_map(function($nome) {
return strtoupper($nome);
}, $nomes);
// Arrow function
$maiusculas = array_map(fn($nome) => strtoupper($nome), $nomes);
print_r($maiusculas); // [ANA, BRUNO, CARLOS]
Arrow functions capturam automaticamente variáveis do escopo pai, enquanto funções anônimas exigem use().
Conclusão
Dominar funções em PHP é essencial para escrever código limpo e manutenível. Retenha: (1) declare funções com nomes descritivos e use type hints para clareza; (2) parametrize adequadamente, aproveitando valores padrão e referências quando apropriado; (3) retorne valores explicitamente e considere devolver arrays ou objetos para dados complexos. Com esses fundamentos, você construirá aplicações profissionais e escaláveis.