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ónDescripció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.
To Top