我正在构建我的错误报告系统的基础知识,基本上我已经设置了这两个坏男孩
class System {
public function __construct(){
set_exception_handler(array($this, 'handleExceptions'));
set_error_handler(array($this, 'handleGenericError'));
}
public function handleExceptions(\Exception $e){
echo "<pre>".print_r($e, true)."</pre>";
}
public function handleGenericError($no, $msg, $file, $line, $context){
$msg .= ' in ['.$file.'] on line ['.$line.']';
throw new \Exception($msg);
}
}
然后我在声明之后在__construct
方法中引发错误。语句如
public function __construct(){
....
echo $undefined_variable;
}
和
public function __construct(){
....
echo $this->undefined_variable;
}
似乎顺利,打印一个很好的可读异常消息,但如果我这样做
public function __construct(){
....
echo $this->$undefined_variable;
}
我得到一个未被捕获的例外。这是为什么?抛出的异常来自handleGenericError
方法,我可以告诉它,因为它周围有[]
个东西。这有点令人困惑。 :/
答案 0 :(得分:1)
问题 - 我认为 - 就是这样:
public function __construct(){
....
echo $this->$undefined_variable;
}
最有可能导致:
echo $this->[null];
当您执行$this->$undefined_variable
之类的作业时,我相信PHP会将其解析为“将变量$undefined_variable
的值分配给$this->
之后的正确值。” 意味着它甚至没有进入处理程序,因为100%的东西都没有。它只是一个空值。就像你打电话:
echo $this->;
这是一个更大的程序逻辑失败,因为所有异常处理程序都会捕获成功获取它的错误。对$this->
的调用是课堂范围之外的基本逻辑失败。其中的异常处理程序。您可以阅读how exception handlers in PHP work here。