PHP

Guia Completo de Funções em PHP: Declaração, Parâmetros e Retorno

7 min de leitura

Guia Completo de Funções em PHP: Declaração, Parâmetros e Retorno

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 , seguida pelo nome e parênteses. Nomes de funções devem ser descritivos, começar com letra ou underscore, e seguir a convenção camelCase ou snakecase. 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. 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,

<h2>Declaração de Funções em PHP</h2>

<p>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 <code>function</code>, seguida pelo nome e parênteses.</p>

<pre><code class="language-php">function saudar() {

echo &quot;Olá, mundo!&quot;;

}

saudar(); // Saída: Olá, mundo!</code></pre>

<p>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).</p>

<h2>Parâmetros e Argumentos</h2>

<h3>Parâmetros Obrigatórios e Opcionais</h3>

<p>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.</p>

<pre><code class="language-php">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</code></pre>

<p>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.</p>

<h3>Type Hints e Validação</h3>

<p>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.</p>

<pre><code class="language-php">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(&quot;5&quot;, &quot;3&quot;); // Funciona: strings numéricas são convertidas</code></pre>

<p>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.</p>

<h3>Parâmetros por Referência</h3>

<p>Por padrão, PHP passa parâmetros por valor (cópia). Com referência (&amp;), a função modifica a variável original.</p>

<pre><code class="language-php">function incrementar(&amp;$numero) {

$numero++;

}

$x = 5;

incrementar($x);

echo $x; // 6 — a variável original foi modificada</code></pre>

<p>Use referências com cautela, pois podem dificultar o rastreamento de mudanças. Preferencialmente, retorne o novo valor em vez de usar referências.</p>

<h2>Retorno de Valores</h2>

<h3>Return e Tipos de Retorno</h3>

<p>A instrução <code>return</code> encerra a função e devolve um valor ao chamador. Funções sem <code>return</code> explícito retornam <code>null</code>.</p>

<pre><code class="language-php">function obterIdade($anoNascimento) {

$anoAtual = date(&#039;Y&#039;);

return $anoAtual - $anoNascimento;

}

$idade = obterIdade(1990);

echo $idade; // Número correspondente ao ano atual menos 1990</code></pre>

<p>Type hints para retorno melhoram clareza. Combine com parâmetros tipados para máxima robustez:</p>

<pre><code class="language-php">function processar(string $nome, int $idade): string {

if ($idade &lt; 18) {

return &quot;Menor de idade&quot;;

}

return &quot;Bem-vindo, $nome!&quot;;

}

echo processar(&quot;Ana&quot;, 25); // Bem-vindo, Ana!</code></pre>

<h3>Retornando Múltiplos Valores</h3>

<p>Quando precisa retornar múltiplos valores, use arrays ou objetos. A desestruturação de arrays (PHP 7.1+) torna isso elegante.</p>

<pre><code class="language-php">function dividirnome($nomeCompleto) {

$partes = explode(&quot; &quot;, $nomeCompleto);

return [

&#039;primeiro&#039; =&gt; $partes[0] ?? &#039;&#039;,

&#039;ultimo&#039; =&gt; end($partes) ?? &#039;&#039;

];

}

[&#039;primeiro&#039; =&gt; $f, &#039;ultimo&#039; =&gt; $u] = dividirnome(&quot;João Silva&quot;);

echo &quot;$f - $u&quot;; // João - Silva</code></pre>

<p>Alternativamente, retorne um objeto para melhor legibilidade em estruturas complexas:</p>

<pre><code class="language-php">function validarEmail($email): object {

$valido = filter_var($email, FILTER_VALIDATE_EMAIL);

return (object)[

&#039;valido&#039; =&gt; (bool)$valido,

&#039;mensagem&#039; =&gt; $valido ? &#039;Email válido&#039; : &#039;Email inválido&#039;

];

}

$resultado = validarEmail(&quot;usuario@exemplo.com&quot;);

echo $resultado-&gt;mensagem; // Email válido</code></pre>

<h2>Funções Avançadas</h2>

<h3>Argumentos Variáveis</h3>

<p>Use <code>...</code> (splat operator) para aceitar número indefinido de argumentos:</p>

<pre><code class="language-php">function somar(...$numeros) {

return array_sum($numeros);

}

echo somar(1, 2, 3, 4, 5); // 15

echo somar(10, 20); // 30</code></pre>

<h3>Funções Anônimas e Arrow Functions</h3>

<p>Funções anônimas são úteis em callbacks. Arrow functions (PHP 7.4+) oferecem sintaxe mais concisa:</p>

<pre><code class="language-php">$nomes = [&#039;Ana&#039;, &#039;Bruno&#039;, &#039;Carlos&#039;];

// Anônima

$maiusculas = array_map(function($nome) {

return strtoupper($nome);

}, $nomes);

// Arrow function

$maiusculas = array_map(fn($nome) =&gt; strtoupper($nome), $nomes);

print_r($maiusculas); // [ANA, BRUNO, CARLOS]</code></pre>

<p>Arrow functions capturam automaticamente variáveis do escopo pai, enquanto funções anônimas exigem <code>use()</code>.</p>

<h2>Conclusão</h2>

<p>Dominar funções em PHP é essencial para escrever código limpo e manutenível. Retenha: <strong>(1)</strong> declare funções com nomes descritivos e use type hints para clareza; <strong>(2)</strong> parametrize adequadamente, aproveitando valores padrão e referências quando apropriado; <strong>(3)</strong> retorne valores explicitamente e considere devolver arrays ou objetos para dados complexos. Com esses fundamentos, você construirá aplicações profissionais e escaláveis.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://www.php.net/manual/en/language.functions.php" target="_blank" rel="noopener noreferrer">PHP Manual: Functions</a></li>

<li><a href="https://www.php.net/manual/en/language.types.declarations.php" target="_blank" rel="noopener noreferrer">PHP Manual: Type Declarations</a></li>

<li><a href="https://www.php.net/manual/en/functions.arrow.php" target="_blank" rel="noopener noreferrer">Documentação Arrow Functions</a></li>

<li><a href="https://www.php-fig.org/psr/psr-12/" target="_blank" rel="noopener noreferrer">PHP Best Practices - PSR-12</a></li>

<li><a href="https://www.oreilly.com/library/view/clean-code-in/9781098129195/" target="_blank" rel="noopener noreferrer">Clean Code in PHP - O&#039;Reilly</a></li>

</ul>

Comentários

Mais em PHP

Como Usar Estruturas de Controle: if, else, switch e match em Produção
Como Usar Estruturas de Controle: if, else, switch e match em Produção

Estruturas de Controle: Dominando o Fluxo do Seu Código Estruturas de control...

Construindo uma API REST Completa com Laravel na Prática
Construindo uma API REST Completa com Laravel na Prática

Fundações: Preparando o Ambiente Antes de construir sua API REST em Laravel,...

Boas Práticas de Namespaces e Autoloading com PSR-4 para Times Ágeis
Boas Práticas de Namespaces e Autoloading com PSR-4 para Times Ágeis

O que são Namespaces? Namespaces são mecanismos de organização de código que...