NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"> create_function (PHP 4 >= 4.0.1)
create_function -- 匿å(ラムダ形å¼)関数を作æˆã™ã‚‹
説明 string
create_function ( string args, string code)
指定ã—ãŸãƒ‘ラメータã«ã‚ˆã‚ŠåŒ¿å関数を作æˆã—ã€ãã®é–¢æ•°ã®ãƒ¦ãƒ‹ãƒ¼ã‚¯ãªå
å‰ã‚’è¿”ã—ã¾ã™ã€‚通常ã€args をシングルクオー
ãƒˆã§æ‹¬ã‚‰ã‚ŒãŸæ–‡å—åˆ—ã§æŒ‡å®šã—ã¾ã™ã€‚code ã«ã¤
ã„ã¦ã‚‚åŒæ§˜ã«æŒ‡å®šã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã‚·ãƒ³ã‚°ãƒ«ã‚¯ã‚ªãƒ¼ãƒˆã§æ‹¬ã£ãŸ
æ–‡å—列を使用ã™ã‚‹ç†ç”±ã¯ã€ãƒ‘ース時ã«å¤‰æ•°åã‚’ä¿è·ã™ã‚‹ãŸã‚ã§ã™ã€‚ダブ
ルクオートを使用ã—ãŸå ´åˆã«ã¯ã€\$avar ã®ã‚ˆã†ã«å¤‰
æ•°åをエスケープã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
(例ãˆã°ã€)実行時ã«å–å¾—ã—ãŸæƒ…å ±ã‹ã‚‰é–¢æ•°ã‚’作æˆã™ã‚‹éš›ã«ã“ã®é–¢æ•°ã‚’使
用ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
例 1
create_function() ã«ã‚ˆã‚ŠåŒ¿å関数を作æˆã™ã‚‹
$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";
// 出力
// æ–°è¦åŒ¿å関数: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
ã‚‚ã—ãã¯ã€ä¸€èˆ¬çš„ãªãƒãƒ³ãƒ‰ãƒ«é–¢æ•°ã‚’作æˆã™ã‚‹ãŸã‚ã«ã€ãƒ‘ラメータã®ãƒªã‚¹
トã«ä¸€é€£ã®æ¼”ç®—åã‚’é©ç”¨ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚
例 2
create_function() ã§ä¸€èˆ¬çš„ãªå‡¦ç†é–¢æ•°ã‚’作æˆã™ã‚‹
function process($var1, $var2, $farr) {
for ($f=0; $f < count($farr); $f++)
echo $farr[$f]($var1,$var2)."\n";
}
// ä¸€é€£ã®æ•°å¦é–¢æ•°ã‚’作æˆã™ã‚‹
$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);
// ä¸€é€£ã®æ–‡å—列処ç†é–¢æ•°ã‚’作æˆã™ã‚‹
$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);
上ã®ã‚³ãƒ¼ãƒ‰ã‚’実行ã—ãŸå ´åˆã€å‡ºåŠ›ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
ã—ã‹ã—ã€æã‚‰ãラムダ形å¼ã®(匿å)é–¢æ•°ã®æœ€ã‚‚一般的ãªä½¿ç”¨æ³•ã¯ã€
array_walk() ã¾ãŸã¯
usort()
を使用ã™ã‚‹å ´åˆã«ã‚ˆã†ã«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã‚’作æˆã™ã‚‹å ´åˆã§ã—ょã†ã€‚
例 3コールãƒãƒƒã‚¯é–¢æ•°ã¨ã—ã¦åŒ¿å関数を使用
$av = array("the ","a ","that ","this ");
array_walk($av, create_function('&$v,$k','$v = $v."mango";'));
print_r($av); // for PHP3 use var_dump()
// 出力:
// Array
// (
// [0] => the mango
// [1] => a mango
// [2] => that mango
// [3] => this mango
// )
// çŸã„é †ã«ã‚½ãƒ¼ãƒˆã•ã‚ŒãŸæ–‡å—列ã®é…列
$sv = array("small","larger","a big string","it is a string thing");
print_r($sv);
// 出力:
// Array
// (
// [0] => small
// [1] => larger
// [2] => a big string
// [3] => it is a string thing
// )
// é•·ã•é †ã«ã‚½ãƒ¼ãƒˆã™ã‚‹
usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);
// 出力:
// Array
// (
// [0] => it is a string thing
// [1] => a big string
// [2] => larger
// [3] => small
// )