create_functionはクロージャにはなれない
Rubyだとこんな感じで書ける
def counter i = 0 lambda{|n| i += n} end count = counter puts count.call(1) #=> 1 puts count.call(2) #=> 3 puts count.call(3) #=> 6
PHPの場合も同じ結果を期待したけど、クロージャとしては動いてくれないらしい。
<?php function counter() { $i = 0; return create_function('$n',"$i = $i + $n;"); } $func = counter(); echo $func(1); // Parse error: syntax error, unexpected '=' echo $func(3); echo $func(5);
文字列をダブルクォーテーションで囲っているため、$iは文字列内で変数として評価されてしまう。
そのため、create_function内では以下のような式が入ることになる。
0 = 0 + 1
そりゃ動かないわな。
ちなみにシングルクォーテーションにすると、function内のローカル変数扱いになるため、外の変数は参照されません。
5.3のλ導入までは使えないってことですかね。