create_function

(PHP 4 >= 4.0.1, PHP 5)

create_functionCrée une fonction anonyme

Description

string create_function ( string $args , string $code )

create_function() crée une fonction anonyme, à partir des paramètres passés, et retourne un nom de fonction unique.

Liste de paramètres

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.

Valeurs de retour

Retourne un nom de fonction unique, sous la forme d'une chaîne de caractères, ou FALSE si une erreur survient.

Exemples

Exemple #1 Création d'une fonction anonyme avec create_function()

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

Ou, pour pouvoir appliquer une fonction générique à une liste d'arguments.

Exemple #2 Traitement générique par fonction avec create_function()

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

// Création d'une série de fonctions mathématiques
$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 "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);
?>
<?php
$av = array("la ", "une ", "cette ", "une certaine ");
array_walk($av, create_function('&$v,$k', '$v = $v . "maison";'));
print_r($av);
?>
<?php

$sv = array("petite", "longue", "une très longue chaîne", "une phrase toute entière");
print_r($sv);

?>
<?php

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

?>

L'exemple ci-dessus va afficher :

Array
(
  [0] => une phrase toute entière
  [1] => une très longue chaîne
  [2] => longue
  [3] => petite
)

Voir aussi

LoadingChargement en cours