create_functionCrée une fonction anonyme
&warn.deprecated.function-7-2-0.removed-8-0-0;
&reftitle.description;
stringcreate_functionstringargsstringcodecreate_function crée une fonction anonyme,
à partir des paramètres passés, et retourne un nom de fonction unique.
Cette fonction, en interne, utilise la fonction
eval et donc les exigences en terme
de sécurité sont identiques à celles de la fonction eval.
De plus, les performances ne sont pas au rendez-vous et l'usage mémoire
est significatif.
Une fonction anonyme native
devrait être utilisée à la place.
&reftitle.parameters;
Généralement, les arguments args sont
présentés sous la forme d'une chaîne à guillemets simples, et la même
recommandation vaut pour code.
La raison de l'utilisation des guillemets simples est de protéger
les noms de variables du remplacement par leur valeur. Si vous utilisez
les guillemets doubles, n'oubliez pas d'échapper les noms
de variables (i.e. \$avar).
args
Les arguments de la fonction.
code
Le code de la fonction.
&reftitle.returnvalues;
Retourne un nom de fonction unique, sous la forme d'une &string;,
ou &false; si une erreur survient.
&reftitle.examples;
Création d'une fonction anonyme avec create_function
Vous pouvez utiliser cette fonction pour (par exemple) créer
une fonction à partir d'informations récoltées
durant l'exécution :
]]>
Ou, pour pouvoir appliquer une fonction générique
à une liste d'arguments.
Traitement générique par fonction avec create_function
=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 "un peu de trigo : ".(sin($x) + $x*cos($y));'),
create_function('$x,$y', 'return "une hypoténuse : ".sqrt($x*$x + $y*$y);'),
create_function('$a,$b', $f1),
create_function('$a,$b', $f2),
create_function('$a,$b', $f3)
);
echo "\nUtilisation de la première liste de fonctions anonymes\n";
echo "paramétres : 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);
// Maintenant une liste de fonctions sur chaîne de caractères
$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 "similarité (a,b) = " . similar_text($a, $b, &$p) . "($p%)";')
);
echo "\nUtilisation de la seconde liste de fonctions anonymes\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);
?>
]]>
&example.outputs;
Mais l'utilisation la plus courante des fonctions lambda est la
fonction de rappel, par exemple, lors de l'utilisation de
array_walk ou usortUtilisation de fonctions anonymes comme fonction de rappel
]]>
&example.outputs;
la maison
[1] => une maison
[2] => cette maison
[3] => une certaine maison
)
]]>
un tableau de chaînes de caractères ordonnées de la plus courte à la plus longue
]]>
&example.outputs;
petite
[1] => longue
[2] => une très longue chaîne
[3] => une phrase toute entière
)
]]>
ordonnées de la plus longue à la plus courte
]]>
&example.outputs;
une phrase toute entière
[1] => une très longue chaîne
[2] => longue
[3] => petite
)
]]>
&reftitle.seealso;
Fonctions anonymes