Funciones variables

PHP admite el concepto de funciones variables. Esto significa que si un nombre de variable tiene paréntesis anexos a él, PHP buscará una función con el mismo nombre que lo evaluado por la variable, e intentará ejecutarla. Entre otras cosas, esto se puede usar para implementar llamadas de retorno, tablas de funciones, y así sucesivamente.

Las funciones variables no funcionarán con constructores de lenguaje como echo, print, unset(), isset(), empty(), include, require y similares. Utilice funciones de envoltura para hacer uso de cualquiera de estos constructores como funciones variables.

Ejemplo #1 Ejemplo de función variable

<?php
function foo() {
    echo 
"En foo()<br />\n";
}

function 
bar($arg '')
{
    echo 
"En bar(); el argumento era '$arg'.<br />\n";
}

// Esta es una función de envoltura alrededor de echo
function hacerecho($cadena)
{
    echo 
$cadena;
}

$func 'foo';
$func();        // Esto llama a foo()

$func 'bar';
$func('prueba');  // Esto llama a bar()

$func 'hacerecho';
$func('prueba');  // Esto llama a hacerecho()
?>

Los métodos de objetos también puede ser llamados con la sintaxis de funciones variables.

Ejemplo #2 Ejemplo de método variable

<?php
class Foo
{
    function 
Variable()
    {
        
$nombre 'Bar';
        
$this->$nombre(); // Esto llama al método Bar()
    
}

    function 
Bar()
    {
        echo 
"Esto es Bar";
    }
}

$foo = new Foo();
$nombrefunc "Variable";
$foo->$nombrefunc();  // Esto llama a $foo->Variable()

?>

Cuando se llaman a métodos estáticos, la llamada a la función es más fuerte que el operador de propiedad estática:

Ejemplo #3 Ejemplo de método variable con propiedades estáticas

<?php
class Foo
{
    static 
$variable 'propiedad estática';
    static function 
Variable()
    {
        echo 
'Método Variable llamado';
    }
}

echo 
Foo::$variable// Esto imprime 'propiedad estática'. No necesita una $variable en este ámbito.
$variable "Variable";
Foo::$variable();  // Esto llama a $foo->Variable() leyendo $variable en este ámbito.

?>

A partir de PHP 5.4.0, se puede llamar a cualquier callable almacenado en una variable.

Ejemplo #4 Llamables complejos

<?php
class Foo
{
    static function 
bar()
    {
        echo 
"bar\n";
    }
    function 
baz()
    {
        echo 
"baz\n";
    }
}

$func = array("Foo""bar");
$func(); // imprime "bar"
$func = array(new Foo"baz");
$func(); // imprime "baz"
$func "Foo::bar";
$func(); // imprime "bar" a partrid de PHP 7.0.0; antes, emitía un error fatal
?>

Véase también is_callable(), call_user_func(), variables variables y function_exists().

Historial de cambios

Versión Descripción
7.0.0 'NombreDeClase::NombreDeMétodo' se permite como función variable.
5.4.0 Los arrays, que son llamables válidos, están permitidos como funciones variables.