PHP で クロージャ失敗

| | コメント(0) | トラックバック(0)



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

コメントする