遇到这种奇怪的情况
class my_class {
public $error_handler;
public function __construct($error_handler = NULL) {
$this->error_handler = $error_handler;
}
public function error($description) { //<- calling this breaks PHP
if ($this->error_handler === NULL) die($description);
$this->error_handler($description);
}
public function error2($description) { //<- calling this works fine
if ($this->error_handler === NULL) die($description);
$handler = $this->error_handler;
$handler($description);
}
public function spawn_error() {
$this->error("I'm a feature, not a bug.");
}
}
$special_error_handler = function($description) {
die("special handling for $description");
};
$my_obj = new my_class($special_error_handler);
$my_obj->spawn_error();
调用my_class :: error时,会引发未定义的方法错误,调用my_class :: error2可以正常工作。我的意思是..从技术上讲,正确的做法是my_class没有名为error_handler的方法,但是它确实具有存储匿名函数的变量,为什么它不在那里?
除了使用临时变量之外,还有没有其他特殊方法可以调用存储在类变量中的匿名函数?