PHP で クロージャ失敗
http://d.hatena.ne.jp/am11op/20070702/1183376369
↑前エントリのクロージャもどきがものすごく使いたくならない理由がわかった。
function closure($str) { $str = ereg_replace("^function\(\) *\{", "", $str); $str = ereg_replace("\}$", "", $str); $func =create_function('', $str); $func(); } class Test{ function sayTest(){ echo 'test'; } } $obj = new Test; function piyo($bool, $obj='') { if ($bool) { closure($obj['onSuccess']); } else { closure($obj['onFailure']); } } $arr1 = array( 'onSuccess'=>'echo "OK!";', 'onFailure'=>'echo "NG!";', ); echo piyo(true, $arr1); // OK! echo piyo(false, $arr1); // NG! $arr2 = array( 'onSuccess'=>'function(){echo $obj->sayTest();}', // この時点で syntax error ); echo piyo(true, $arr2);
class とか instance 使った時点で閉じた空間じゃなくなるので、
こういうものはいくらそれっぽく作っても、
結局 closure とは呼べないだろうと思った。
- 結論
- 失敗例を増やしただけ