International PHP Conference 2015

Funzioni variabili

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().

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top