PHP 5.6.0 released

Funções definidas pelo usuário

Uma função pode ser definida usando a seguinte sintaxe:

Exemplo #1 Pseudo-código de demonstração de uma função

<?php
function foo ($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Exemplo de função.\n";
    return 
$valor_retornado;
}
?>

Qualquer código PHP válido pode aparecer dentro de uma função, mesmo outras funções e definições de classes.

Nomes de funções seguem as mesmas regras que outros rótulo no PHP. Um nome de função válido começa com uma letra ou um sublinhado, seguido, seguido por qualquer número de letras, números ou sublinhado. Com uma expressão regular, seria expressado com: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

As funções não precisam ser criadas antes de serem referenciadas, exceto quando uma função é condicionalmente definida como mostrado nos dois exemplos abaixo.

Quando uma função é definida condicionalmente como nos dois exemplos abaixo, sua definição precisa ser processada antes de ser chamada.

Exemplo #2 Funções definidas condicionalmente

<?php

$makefoo 
true;

/* Nos nao podemos chamar foo() daqui
   porque ela ainda não existe,
   mas nos podemos chamar bar() */

bar();

if (
$makefoo) {
  function 
foo ()
  {
    echo 
"Eu não existo até que o programa passe por aqui.\n";
  }
}

/* Agora nos podemos chamar foo()
   porque $makefoo foi avaliado como true */

if ($makefoofoo();

function 
bar()
{
  echo 
"Eu existo imediatamente desde o programa começar.\n";
}

?>

Exemplo #3 Funções dentro de funções

<?php
function foo()
{
  function 
bar()
  {
    echo 
"Eu não existo até foo() ser chamada.\n";
  }
}

/* Nós não podemos chamar bar() ainda
   porque ela ainda não foi definida. */

foo();

/* Agora nós podemos chamar bar(),
   porque o processamento de foo()
   tornou a primeira acessivel */

bar();

?>

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.

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.

Nota: Nomes de funções são insensíveis ao caso, mas é melhor chamar as funções da mesma forma que ela aparecem nas declarações.

Ambos número variável de argumentos e argumentos padrões são suportados em funções. veja também as referencias das funções func_num_args(), func_get_arg() e func_get_args() para mais informações.

É possível chamar funções recursivas no PHP. Entretanto evite o uso de funções/métodos recursivos com mais de 100-200 níveis de recursão já que isso pode estourar a pilha e causar o encerramento do script atual.

Exemplo #4 Funções Recursivas

<?php
function recursion($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursion($a 1);
    }
}
?>

add a note add a note

User Contributed Notes 5 notes

up
7
aydinantmen [at] hotmail [dot] com
4 months ago
I want to use multidimentional arrays in a callback function what accepts second parameter.

Solution:

<?php

$arr1
= array("a" => "b", "c", "d's", "e" => array("f's", "g" => array("h's", "i" => "j's")));
$arr2 = mdarr_parameter($arr1);
$arr3 = mdarr_parameter($arr2, true);

function
mdarr_parameter($needle, $job=false) {
    if (
is_array($needle)) {
        foreach(
$needle as $name => $value) {
           
$needle[$name] = mdarr_parameter($value, $job);
        }
    } else {
       
// Now you do anything you want...
       
if ($job === true) {
           
$needle = stripslashes($needle);
        } else {
           
$needle = addslashes($needle);
        }
    }
    return
$needle;
}

print_r($arr2);
print_r($arr3);

/**
Outputs:

Array
(
    [a] => b
    [0] => c
    [1] => d\'s
    [e] => Array
        (
            [0] => f\'s
            [g] => Array
                (
                    [0] => h\'s
                    [i] => j\'s
                )

        )

)
Array
(
    [a] => b
    [0] => c
    [1] => d's
    [e] => Array
        (
            [0] => f's
            [g] => Array
                (
                    [0] => h's
                    [i] => j's
                )

        )

)
**/

?>
up
5
webmaster at heathdale dot vic dot edu dot au
4 months ago
<?php

// first run (function doesn't exist)
$myfunc_exists;
if (!
$myfunc_exists) {
    function
myfunc() {
        echo (
'myfunc ran definition #1<br>');
    }
   
$myfunc_exists = true;
}

myfunc();   // echoes 'myfunc ran definition #1<br>'

// second run (function already exists, so won't be redefined and won't cause error)
// e.g. if the file containing the function got #included twice (it does happen)
$myfunc_exists;
if (!
$myfunc_exists) {
    function
myfunc() {
        echo (
'myfunc ran definition #2<br>');
    }
   
$myfunc_exists = true;
}

myfunc();  // still echoes 'myfunc ran definition #1<br>' (not #2)

?>
up
-8
Alexandre
3 months ago
In  PHP version less than 5 a function named "retorna_so_numeros" was OK.

Now in current PHP version I had to rename this function to "retorna_numeros" or the script won't work.
up
-36
Ben Tiessen
7 months ago
Functions can also be executed from variables:

function myFunc(){
  echo "Hello World";
}

$myFunc = myFunc();

$myFunc();

// Will output Hello World
up
-37
lubaev
7 months ago
<?php

function overload()
{
 
$overloadFn = array();
 
 
// key = count arguments, value = callback function.
 
$overloadFn[0] = function() {
    return print
nl2br("Zero argument. \n");
  };
 
$overloadFn[1] = function($a) {
    return print
nl2br("One argument. Result: $a \n");
  };
 
$overloadFn[2] = function($a,$b) {
    return print
nl2br("Two argument. Result: $a, $b \n");
  };
 
$overloadFn[4] = function($a,$b,$c,$d) {
    return print
nl2br("Four argument. Result: $a, $b, $c, $d \n");
  };
 
 
$countArgs = func_num_args();
 
$valueArgs = func_get_args();
 
  if( isset(
$overloadFn[ $countArgs ]) )
  {
    return
call_user_func_array( $overloadFn[ $countArgs ], $valueArgs );
  }
 
trigger_error("Wrong number of arguments!", E_USER_WARNING);
 
}

// OVERLOAD
overload(); // Zero argument.
overload(1); // One argument. Result: 1
overload(1,2); // Two argument. Result: 1, 2
overload(1,2,3); // Warning: Wrong number of arguments!
overload(1,2,3,4); // Four argument. Result: 1, 2, 3, 4
overload(1,2,3,4,5); // Warning: Wrong number of arguments!

?>
To Top