调用存储在类变量中的匿名函数

时间:2018-09-09 23:20:49

标签: php

遇到这种奇怪的情况

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的方法,但是它确实具有存储匿名函数的变量,为什么它不在那里?

除了使用临时变量之外,还有没有其他特殊方法可以调用存储在类变量中的匿名函数?

0 个答案:

没有答案