杂项函数库

create_function

(PHP4 >= 4.0.1)

create_function ---  建立匿名函数

语法 : string create_function (string args, string code)

说明 : 

从传递的参数建立一个匿名的函数,并且传回一个独一无二的名称。通常参数args将会传递成一个单引号字符串,而参数code也是如此,使用单引号字符串的理由是为了要从剖析中来保护变量名称,否则,如果你使用双引号的话,就必须要逃脱变量名称,例如 : \$avar

你可以使用这个函数,从执行时收集到的资讯来建立一个函数

Example :

<?php

    $newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);'); 

    echo "New anonymous function: $newfunc\n";

    echo $newfunc(2,M_E)."\n";

    // outputs 

    // New anonymous function: lambda_1 

    // ln(2) + ln(2.718281828459) = 1.6931471805599

?>

或者是拥有处理者(handler)函数,这可以请求一个运作的设定到一个参数的列表

Example :

<?php

   function process($var1, $var2, $farr) { 

                for ($f=0; $f < count($farr); $f++) 

                            echo $farr[$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.3445, M_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);

?>

当你执行上面的范例时,输出将会是 :

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 , 1908338681 

similar(a,b) = 11(45.833333333333%)

匿名函数常见的使用是用来建立callback函数,例如 : 当使用array_walk( )usort( )时 :

<?php

   $av = array("the ","a ","that ","this "); 

   array_walk($av, create_function('&$v,$k','$v = $v."mango";')); 

   print_r($av);     // for PHP3 use var_dump( ) 

   // outputs: 

   // Array 

   // ( 

   //       [0] => the mango 

   //       [1] => a mango

   //       [2] => that mango 

   //       [3] => this mango 

   // ) 

   // an array of strings ordered from shorter to longer 

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

  print_r($sv); 

  // outputs: 

  // Array 

  // ( 

  //        [0] => small 

  //        [1] => larger 

  //        [2] => a big string 

  //        [3] => it is a string thing 

  // ) 

  // sort it from longer to shorter 

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

  print_r($sv); 

  // outputs: 

  // Array 

  // ( 

  //        [0] => it is a string thing 

  //        [1] => a big string 

  //        [2] => larger 

  //        [3] => small 

  //  )

?>


上一页 首页 下一页