我正在为一个类创建一个事件处理程序,但我想知道使用闭包而不是评估代码是否会更好?
我使用 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');
}
);
?>
它会毫无错误地执行吗?我会自己测试它,但我目前无法测试。