クラスのイベント ハンドラーを作成していますが、コードの評価ではなくクロージャーを使用した方がよいのではないかと考えていました。
eval() を使用する唯一の理由は、クラス内のすべてにアクセスできるからです (そして、本当に安全ではありません:D) が、クロージャがアクセスできるかどうかはわかりません。
私がこのようなことをした場合:
<?php
class SomethingCool {
protected $handlers;
public function addHandler($cmd, closure $func) {
$this->handlers[$cmd][] = $func;
}
public function handle($cmd) {
if(!isset($this->handlers[$cmd]))
return false;
foreach($this->handlers[$cmd] as $func)
$func();
}
}
?>
<?php
$wut = new SomethingCool();
$wut->addHandler('lol', function() use($wut) {
$wut->handle('lol');
}
);
?>
エラーなしで実行されますか? 私はそれを自分でテストしますが、現時点ではできません。