PHP supporta il concetto di funzioni variabili. Ciò significa che se un nome di variabile ha le parentesi accodate ad esso, PHP cercherà una funzione con lo stesso nome del valore della variabile, e cercherà di eseguirla. Tra le altre cose, ciò puo essere usato per implementare delle callbacks, tabelle di funzioni e così via.
Le funzioni variabili non funzionano con costrutti di linguaggio come echo, print, unset(), isset(), empty(), include, require e simili. Occorre costruire una propria funzione per utilizzare questi costrutti come variabili per funzioni.
Example #1 Esempio di funzioni variabili
<?php
function foo() {
echo "In foo()<br />\n";
}
function bar($arg = '')
{
echo "In bar(); l'argomento era '$arg'.<br />\n";
}
// Questa è la funzione per usare echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // questa chiama foo()
$func = 'bar';
$func('test'); // questa chiama bar()
$func = 'echoit';
$func('test'); // questa chiama echoit()
?>
Tramite le funzioni variabili si possono eseguire anche metodi di oggetti.
Example #2 Esempio di un metodo variabile
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // Questo esegue il metodo Bar()
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // Questo esegue $foo->Variable()
?>
Quando si chiamano dei metodi statici, la chiamata a funzione ha la precedenza sull'operatore di proprietà statica:
Example #3 Esempio di metodo variabile con proprietà statiche
<?php
class Foo
{
static $variable = 'static property';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable; // Questo stampa 'static property'. Non ha bisogno di una $variable in questo ambito.
$variable = "Variable";
Foo::$variable(); // Questo chiama $foo->Variable() leggendo $variable da questo ambito.
?>
Vedere anche is_callable(), call_user_func(), variabili variabili e function_exists().