Manuel PHP
Précédent
Suivant
create_function() crée une fonction anonyme, à partir des paramètres passés, et retourne un nom de fonction unique.
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 proteger 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).
Vous pouvez utiliser cette fonction pour (par exemple) créer une fonction à partir d'informations récoltés durant l 'éxécution.
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?
Exemple 2.
Traitement générique par fonction avec create_function()
?php function process( $var1, $var2, $farr) {for ($f=0; $f count($farr); $f++) echo $farr[$f]($var1,$var2) ."\n";} / / création d'une série de fonction 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 fonction sur chaîne de caractères $garr = array (create_function('$b,$a' ,'if (strncmp($a,$b,3) == 0) return "** \"$a\ "'. 'et \"$b\"\n** Ces chaînes de ressemblent!! (regarde les trois premiers caractères)" ;'), 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 secondes liste de fonctions anonymes\n"; process("Twas brilling and the slithy toves", "Twas the night", $garr);?
Utilisation de la première liste de fonctions anonymes paramétres:
2.3445, M_PI Un peu de trigo: -1.6291725057799 Une hypoténuse:
3.9199852871011 b*a^2 = 4.8103313314525 min( b^2+a, a^2,b) = 8.6382729035898 ln(a / b) = 0.27122299212594 Utilisation de la seconde liste de fonctions anonymes ** "Twas the night "et "Twas brilling and the slithy toves" ** Ces chaînes de ressemblent!! (regarde les trois premiers caractères) CRCs: -725381282, 1908338681 similarité(a,b) = 11(45.833333333333%)
Exemple 3.
Utilisation de fonctions anonymes comme fonction de callback
?php $av = array( "la ","une" ,"cette ","une certaine "); array_walk($av, create_function( '$v,$k' ,'$v = $v ."maison" ;')); print_r($av); / / En PHP 3 utilisez var_dump() ?php $av = array("la" ,"une ","cette" ,"une certaine "); array_walk($av, create_function(' $v,$k' ,'$v = $v ."maison" ;')); print_r($av); / / En PHP 3 utilisez var_dump() / / affiche: / / Array / / (/ / [0] = la maison / / [1] = une maison / / [2] = cette maison / / [3] = une certaine maison / /) / / un tableau de chaîne classé par taille $sv = array("petite" ,"moyenne" ,"tres longue" ,"vraiment tres longue"); print_r($sv); / / affiche: / / Array / / (/ / [0] = petite / / [1] = moyenne / / [2] = tres longue / / [3] = vraiment tres longue / /) / / Tri par ordre de taille décroissant usort($sv, create_function('$a,$b' ,'return strlen($b) - strlen($a) ;')); print_r($sv); / / outputs: / / Array / / (/ / [0] = vraiment tres longue / / [1] = tres longue / / [2] = moyenne / / [3] = petite / /)?
Précédent
Sommaire
Suivant
Niveau supérieur