## 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.