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 とは呼べないだろうと思った。
- 結論
- 失敗例を増やしただけ
トラックバック(0)
このブログ記事を参照しているブログ一覧: PHP で クロージャ失敗
このブログ記事に対するトラックバックURL: http://pm.11op.net/mt/mt-tb.cgi/57
コメントする