Funções para Manuseamento de Funções
PHP Manual

create_function

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_functionCria uma função anônima (lambda-style)

Descrição

string create_function ( string $args , string $código )

Cria uma função anônima a partir dos parâmetros passados e retorna um nome único para si.

Cuidado

Essa funcão internalmente executa um eval() e, por isso, tem os mesmos problemas de segurança da eval(). Além disso, ele tem características de má performance e uso ruim de memória.

Se estiver usando PHP 5.3 ou mais novo, deve ser usada uma função anônima nativa.

Parâmetros

Geralmente esses parâmetros serão passados em strings delimitadas por aspas simples. O motivo para usar strings com aspas simples é impedir que os nomes de variáveis sejam interpretados, caso contrário, se você usar aspas duplas, será necessário fazer escape dos nomes das variáveis, por exemplo \$avar.

args

Os argumentos da função.

código

O código da função.

Valor Retornado

Retorna um nome de função único como uma string, ou FALSE em caso de erro.

Exemplos

Exemplo #1 Criação de uma função anônima com create_function()

Você pode usar esta função para (por exemplo) criar uma função a partir de informação obtida em tempo de execução:

<?php
$newfunc 
create_function('$a,$b''return "ln($a) + ln($b) = " . log($a * $b);');
echo 
"New anonymous function: $newfunc\n";
echo 
$newfunc(2M_E) . "\n";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

Ou talvez para ter uma função manipuladora genérica que possa aplicar um conjunto de operações sobre um lista de parâmetros:

Exemplo #2 Criação de uma função de processamento genérica com create_function()

<?php
function process($var1$var2$farr)
{
    foreach (
$farr as $f) {
        echo 
$f($var1$var2) . "\n";
    }
}

// create a bunch of math functions
$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; }';
$farr = array(
    
create_function('$x,$y''return "some trig: ".(sin($x) + $x*cos($y));'),
    
create_function('$x,$y''return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),
    
create_function('$a,$b'$f1),
    
create_function('$a,$b'$f2),
    
create_function('$a,$b'$f3)
    );

echo 
"\nUsing the first array of anonymous functions\n";
echo 
"parameters: 2.3445, M_PI\n";
process(2.3445M_PI$farr);

// now make a bunch of string processing functions
$garr = array(
    
create_function('$b,$a''if (strncmp($a, $b, 3) == 0) return "** \"$a\" '.
    
'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'),
    
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 
"\nUsing the second array of anonymous functions\n";
process("Twas brilling and the slithy toves""Twas the night"$garr);
?>

O exemplo acima irá imprimir:

Using the first array of anonymous functions
parameters: 2.3445, M_PI
some trig: -1.6291725057799
a hypotenuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594

Using the second array of anonymous functions
** "Twas the night" and "Twas brilling and the slithy toves"
** Look the same to me! (looking at the first 3 chars)
CRCs: -725381282, 342550513
similar(a,b) = 11(45.833333333333%)

Mas talvez o uso mais comum para funções do tipo lambda (anônimas) seja para criar funções de callback, por exemplo junto com array_walk() or usort()

Exemplo #3 Uso de funções anônimas como funções callback

<?php
$av 
= array("the ""a ""that ""this ");
array_walk($avcreate_function('&$v,$k''$v = $v . "mango";'));
print_r($av);
?>

O exemplo acima irá imprimir:

Array
(
  [0] => the mango
  [1] => a mango
  [2] => that mango
  [3] => this mango
)

um array de strings ordenado da menor para a maior

<?php

$sv 
= array("small""larger""a big string""it is a string thing");
print_r($sv);

?>

O exemplo acima irá imprimir:

Array
(
  [0] => small
  [1] => larger
  [2] => a big string
  [3] => it is a string thing
)

ordenação da maior para a menor

<?php

usort
($svcreate_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);

?>

O exemplo acima irá imprimir:

Array
(
  [0] => it is a string thing
  [1] => a big string
  [2] => larger
  [3] => small
)

Veja Também


Funções para Manuseamento de Funções
PHP Manual