<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.functions.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'functions.user-defined.php',
    1 => 'Fun&ccedil;&otilde;es definidas pelo usu&aacute;rio',
    2 => 'Fun&ccedil;&otilde;es definidas pelo usu&aacute;rio',
  ),
  'up' => 
  array (
    0 => 'language.functions.php',
    1 => 'Fun&ccedil;&otilde;es',
  ),
  'prev' => 
  array (
    0 => 'language.functions.php',
    1 => 'Fun&ccedil;&otilde;es',
  ),
  'next' => 
  array (
    0 => 'functions.arguments.php',
    1 => 'Par&acirc;metros e argumentos de fun&ccedil;&otilde;es',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'language/functions.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="functions.user-defined" class="sect1">
   <h2 class="title">Funções definidas pelo usuário</h2>

   <p class="para">
    Uma função é definida pelo uso da palavra-chave <code class="literal">function</code>,
    um nome, uma lista de parâmetros (que pode estar vazia) separados por vírgulas
    (<code class="literal">,</code>) entre parênteses, seguidos pelo corpo da
    função entre chaves, como a seguir:
   </p>
   <div class="example" id="example-1">
    <p><strong>Exemplo #1 Declarando uma nova função chamada <code class="literal">foo</code></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">, </span><span style="color: #FF8000">/* ..., */ </span><span style="color: #0000BB">$arg_n</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #DD0000">"Exemplo de função.\n"</span><span style="color: #007700">;<br />    return </span><span style="color: #0000BB">$valor_retornado</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     A partir do PHP 8.0.0, a lista de parâmetros pode ter uma vírgula no final:
     <div class="informalexample">
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$arg_1</span><span style="color: #007700">, </span><span style="color: #0000BB">$arg_2</span><span style="color: #007700">,) { }<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
   </p></blockquote>

   <p class="simpara">
    Qualquer código PHP válido pode aparecer dentro do corpo de uma função, mesmo outras
    funções e definições de
    <a href="language.oop5.basic.php#language.oop5.basic.class" class="link">classes</a>.
   </p>
   <p class="para">
    Nomes de funções seguem as mesmas regras que outros nomes no PHP. Um
    nome de função válido começa com uma letra ou um sublinhado,
    seguido por qualquer número de letras, números ou sublinhados. Com uma expressão
    regular, seria expressado com:
    <code class="code">^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>.
   </p>
   <div class="tip"><strong class="tip">Dica</strong><p class="simpara">Veja também o
<a href="userlandnaming.php" class="xref">Guia de nomenclatura em espa&ccedil;o de usu&aacute;rio</a>.</p></div>
   <p class="simpara">
    As funções não precisam ser criadas antes de serem referenciadas,
    <em>exceto</em> quando uma função é condicionalmente definida
    como mostrado nos dois exemplos abaixo.
   </p>
   <p class="para">
    Quando uma função é definida condicionalmente como nos dois
    exemplos abaixo, sua definição precisa ser processada <em>antes</em>
    de ser chamada.
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Exemplo #2 Funções definidas condicionalmente</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$makefoo </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Não podemos chamar foo() daqui<br />   porque ela ainda não existe,<br />   mas podemos chamar bar() */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br />if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) {<br />  function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />  {<br />    echo </span><span style="color: #DD0000">"Eu não existo até que o programa passe por aqui.\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Agora podemos chamar foo()<br />   porque $makefoo foi avaliado como true */<br /><br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$makefoo</span><span style="color: #007700">) </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />{<br />  echo </span><span style="color: #DD0000">"Eu existo imediatamente desde o programa começar.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Exemplo #3 Funções dentro de funções</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />  function </span><span style="color: #0000BB">bar</span><span style="color: #007700">()<br />  {<br />    echo </span><span style="color: #DD0000">"Eu não existo até foo() ser chamada.\n"</span><span style="color: #007700">;<br />  }<br />}<br /><br /></span><span style="color: #FF8000">/* Nós não podemos chamar bar() ainda<br />   porque ela ainda não foi definida. */<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">/* Agora nós podemos chamar bar(),<br />   porque o processamento de foo()<br />   tornou a primeira acessível */<br /><br /></span><span style="color: #0000BB">bar</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Todas as funções e classes no PHP tem escopo global - elas podem
    ser chamadas fora de uma função mesmo que tenham sido definidas dentro e vice-versa.
   </p>
   <p class="simpara">
    O PHP não suporta sobrecarga de funções, e também não é possível cancelar ou
    alterar a definição de funções previamente declaradas.
   </p>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Nomes de funções são case-insensitive para caracteres ASCII <code class="literal">A</code> até <code class="literal">Z</code>, mas é melhor chamar
     as funções da mesma forma que elas aparecem nas declarações.
    </span>
   </p></blockquote>
   <p class="simpara">
    Ambos <a href="functions.arguments.php#functions.variable-arg-list" class="link">número variável de argumentos
    </a> e <a href="functions.arguments.php#functions.arguments.default" class="link">argumentos
    padrões</a> são suportados em funções. veja também as referências
    das funções
    <span class="function"><a href="function.func-num-args.php" class="function">func_num_args()</a></span>,
    <span class="function"><a href="function.func-get-arg.php" class="function">func_get_arg()</a></span> e
    <span class="function"><a href="function.func-get-args.php" class="function">func_get_args()</a></span> para mais informações.
   </p>

   <p class="para">
    É possível chamar funções recursivas no PHP.
    <div class="example" id="example-4">
     <p><strong>Exemplo #4 Funções Recursivas</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    if (</span><span style="color: #0000BB">$a </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">20</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$a</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">recursion</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Chamadas recursivas a funções/métodos acima de 100-200 níveis podem
     exaurir a pilha e causar o término do script. Especificamente,
     recursão infinita é considerada um erro de programação.
    </span>
   </p></blockquote>
   </p>

  </div><?php manual_footer($setup); ?>