2006/03/27
PHPでクロージャ
PHPのcreate_functionでクロージャできるんじゃないかな。と思って書いてみた。
そもそもクロージャについて詳しく理解してないけど、PHPでやるならこんな感じでしょうか
class closure {
protected $sum = 0;
public function fib($n){
$this->sum++;
if($n == 0){
return 0;
} else if($n == 1){
return 1;
} else {
return $this->fib($n - 1) + $this->fib($n - 2);
}
}
public function calling(){
return $this->sum;
}
public static function create(){
return new closure;
}
public function __clone(){
$this->sum = 0;
}
}
function func(){
return create_function('', '
static $closure;
$n = func_get_arg(0);
if($closure === null){
$closure = closure::create();
}
return "fib :" . $closure->fib($n) . "(" . $closure->calling() . ")";
');
}
ここをマネしてフィボナッチ関数を作ってみた(しかも完全じゃない)
あと、呼び出し回数(sum)なんかも入れておく
実行してみる
$a = func();
var_dump($a(0));
var_dump($a(0));
var_dump($a(12));
$b = func();
var_dump($b(4));
var_dump($b(7));
string(9) "fib :0(1)" string(9) "fib :0(2)" string(13) "fib :144(467)" string(9) "fib :3(9)" string(11) "fib :13(50)"
phpでやるならclass使わないとダメかな。こりゃ。
よく分からなくなってきたので、後は任せます。
ref - steike.com » Php Closures
Trackback
No Trackbacks
Track from Your Website
http://blog.xole.net/trackback/tb.php?id=419

Comment
No Comments