| 6.12 Fonctions
 6 Référence des fonctions
 Manuel PHP
 
 . Introduction
 . Pré-requis
 . Installation
 . Configuration à l'exécution
 . Constantes pré-définies
 . call_user_func_array
 . call_user_func
 ->create_function
 . func_get_arg
 . func_get_args
 . func_num_args
 . function_exists
 . get_defined_functions
 . register_shutdown_function
 . register_tick_function
 . unregister_tick_function
 
 
 | 
  6.12.8 create_function()Crée une fonction anonyme (style lambda)[ Exemples avec create_function ]   PHP 4 >= 4.0.1, PHP 5 
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. 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ées
    durant l'exécution.
     
 | 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.
     
 | Traitement générique par fonction avec create_function |  | 
<?phpfunction process($var1, $var2, $farr)
 {
 foreach ($farr as $f) {
 echo $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 seconde liste de fonctions anonymes\n";
 process("Twas brilling and the slithy toves", "Twas the night", $garr);
 ?>
 | 
 
    Mais l'utilisation la plus courante des fonctions lambda est la
    fonction de callback, par exemple, lors de l'utilisation de
     
array_walk
  ou  
usort
 
 | 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);
 ?>
 | 
 |