call_user_func
func_get_arg
Function handling Functions
PHP Manual

# create_function

(PHP 4 >= 4.0.1, PHP 5)

create_function — Crear una función anónima (estilo-lambda)

### Descripción

string create_function ( string `$args` , string `$codigo` )

Crea una función anónima con los parámetros pasados, y devuelve un nombre único para ella.

### Lista de parámetros

Por lo general estos parámetros serán pasados como cadenas delimitadas por comillas sencillas. La razón para usar cadenas entre comillas sencillas es evitar que los nombres de variables sean interpretados, de otro modo, si usa comillas dobles será necesario escapar los nombres de variables, p.ej. \$una_var.

`args`

  Los argumentos de la función.

`codigo`

  El código de la función.

### Valores retornados

Devuelve un nombre de función único como una cadena, o `FALSE` en caso de error.

### Ejemplos

Example #1 Creación de una función anónima con create_function()

Es posible usar esta función para (por ejemplo) crear una función con información obtenida en tiempo de ejecución:

`<?php
$nueva_func = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "Nueva función anónima: $nueva_func\n";
echo $nueva_func(2, M_E) . "\n";
// imprime
// Nueva función anónima: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>`

O, quizás para tener una función de gestión general que pueda aplicar un conjunto de operaciones a una lista de parámetros:

Example #2 Creación de una función general de procesamiento con create_function()

`<?php
function procesar($var1, $var2, $f_matriz)
{
foreach ($f_matriz as $f) {
echo $f($var1, $var2) . "\n";
}
}
// crear un grupo de funciones matemáticas
$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$f_matriz = array(
create_function('$x,$y', 'return "operación trigonométrica: ".(sin($x) + $x*cos($y));'),
create_function('$x,$y', 'return "una hipotenusa: ".sqrt($x*$x + $y*$y);'),
create_function('$a,$b', $f1),
create_function('$a,$b', $f2),
create_function('$a,$b', $f3)
);
echo "\nUsando la primera matriz de funciones anónimas\n";
echo "parámetros: 2.3445, M_PI\n";
procesar(2.3445, M_PI, $f_matriz);
// ahora crear un grupo de funciones de procesamiento de cadenas
$g_matriz = array(
create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "¡** \"$a\" '.
'y \"$b\"\n ** lucen igual! (mirando los 3 primeros caracteres)";'),
create_function('$a,$b', '; return "CRCs: " . crc32($a) . " , ".crc32(b);'),
create_function('$a,$b', '; return "similar(a,b) = " . similar_text($a, $b, &$p) . "($p%)";')
);
echo "\nUsando la segunda matriz de funciones anónimas\n";
procesar("Twas brilling and the slithy toves", "Twas the night", $g_matriz);
?>`

El resultado del ejemplo seria:

    Usando la primera matriz de funciones anónimas
    parámetros: 2.3445, M_PI
    operación trigonométrica: -1.6291725057799
    una hipotenusa: 3.9199852871011
    b*a^2 = 4.8103313314525
    min(b^2+a, a^2,b) = 8.6382729035898
    ln(a/b) = 0.27122299212594

    Usando la segunda matriz de funciones anónimas
    ¡** "Twas the night" y "Twas brilling and the slithy toves"
     ** lucen igual! (mirando los 3 primeros caracteres)
    CRCs: -725381282 , 1908338681
    similar(a,b) = 11(45.833333333333%)

Pero quizás el uso más común para funciones estilo-lambda (anónimas) es crear llamadas de retorno, por ejemplo cuando se usa array_walk() o usort()

Example #3 Uso de funciones anónimas como llamadas de retorno

`<?php
$av = array("el ", "un ", "ese ", "este ");
array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));
print_r($av);
?>`

El resultado del ejemplo seria:

    Array
    (
      [0] => el mango
      [1] => un mango
      [2] => ese mango
      [3] => este mango
    )

una matriz de cadenas ordenadas desde la más corta a la más larga

`<?php
$sv = array("corta", "mas larga", "una cadena grande", "es una cosa como una cadena");
print_r($sv);
?>`

El resultado del ejemplo seria:

    Array
    (
        [0] => corta
        [1] => mas larga
        [2] => una cadena grande
        [3] => es una cosa como una cadena
    )

ordenarla desde la más larga a la más corta

`<?php
usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);
?>`

El resultado del ejemplo seria:

    Array
    (
        [0] => es una cosa como una cadena
        [1] => una cadena grande
        [2] => mas larga
        [3] => corta
    )

call_user_func
func_get_arg
Function handling Functions
PHP Manual