Funzioni definite dall'utente

Una funzione può essere definita usando la seguente sintassi:

Example #1 Psuedo codice per dimostrare l'uso delle funzioni

<?php
function foo($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Funzione di esempio.\n";
    return 
$retval;
}
?>

All'interno di una funzione può apparire qualunque codice PHP valido, persino altre funzioni e definizioni di classe.

I nomi di funzione seguono le stesse regole delle altre etichette PHP. Un nome di funzione valido comincia con una lettera o un underscore, seguito da un qualsiasi numero di lettere, numeri o underscore. Come espressione regolare, questo viene rappresentato così: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Suggerimento

Si può anche consultare Userland Naming Guide.

Le funzioni devono essere definite prima di essere referenziate tranne quando una funzione è definita condizionalmente come illustrato nei due esempi seguenti.

Quando una funzione è definita in modo condizionale, come illustrato nei seguenti esempi, occorre che ne venga processata prima la definizione poi venga chiamata la funzione stessa.

Example #2 Funzioni condizionali

<?php

$makefoo 
true;

/* Qui non possiamo chiamare foo()
   poiché non esiste ancora,
   ma possiamo chiamare bar() */

bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"Io non esisto sino a quando il programma non mi raggiunge.\n";
  }
}

/* Ora possiamo chiamare foo()
   poiché $makefoo vale true */

if ($makefoofoo();

function 
bar()
{
  echo 
"Io esco immediatamente dopo l'avvio del programma.\n";
}

?>

Example #3 Funzioni dentro a funzioni

<?php
function foo() 
{
  function 
bar() 
  {
    echo 
"Io non esiste fino a quando non si esegue foo().\n";
  }
}

/* Non possiamo chiamare bar()
   poiché non esiste ancora. */

foo();

/* Ora si può eseguire bar(),
   l'elaborazione di foo()
   l'ha resa accessibile. */

bar();

?>

Tutte le funzioni e le classi, in PHP, hanno visibilità globale - possono essere chiamate dall'esterno di una funzione anche se sono definite all'interno di questa e vice-versa.

PHP non supporta l'overloading di funzioni, non è possibile indefinire o ridefinire funzioni precedentemente dichiarate.

Nota: I nomi delle funzioni non distinguono tra maiuscolo e minuscolo, ma, solitamente, è buona norma richiamare le funzioni nel modo con cui sono state definite.

Sia un numero variabile di argomenti che gli argomenti di default sono ammessi nelle funzioni. Vedere anche i riferimenti alle funzioni func_num_args(), func_get_arg() e func_get_args() per maggiori informazioni.

In PHP è possibile utilizzare le chiamate ricorsive. Tuttavia si consiglia di evitare funzioni/metodi ricorsivi profondi oltre 100-200 livelli, potrebbero riempire lo stack e bloccare l'esecuzione dello script.

Example #4 Funzioni ricorsive

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

add a note add a note

User Contributed Notes 3 notes

up
4
webmaster at heathdale dot vic dot edu dot au
14 days 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
-20
lubaev
3 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!

?>
up
-27
Ben Tiessen
2 months ago
Functions can also be executed from variables:

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

$myFunc = myFunc();

$myFunc();

 // Will output Hello World
To Top