【发布时间】:2023-03-23 23:12:02
【问题描述】:
我从Exception派生了一个类,基本上是这样的:
class MyException extends Exception {
private $_type;
public function type() {
return $this->_type; //line 74
}
public function __toString() {
include "sometemplate.php";
return "";
}
}
然后,我像这样从MyException 导出:
class SpecialException extends MyException {
private $_type = "superspecial";
}
如果我从一个函数中throw new SpecialException("bla"),捕获它,然后转到echo $e,那么__toString 函数应该加载一个模板,显示它,然后实际上不返回任何内容来回显。
这基本上就是模板文件中的内容
<div class="<?php echo $this->type(); ?>class">
<p> <?php echo $this->message; ?> </p>
</div>
在我看来,这绝对应该有效。但是,当抛出异常并尝试显示它时,我收到以下错误:
致命错误:无法访问 C:\path\to\exceptions.php 中的私有属性 SpecialException::$_type 第 74 行
谁能解释我为什么在这里违反规则?我用这段代码做了一些非常机智的事情吗?有没有更惯用的方法来处理这种情况? $_type 变量的要点是(如图所示)我希望根据捕获的异常类型使用不同的 div 类。
【问题讨论】:
-
正如我在那里写的:让 __toString() 返回一个空字符串是非常非常非常丑陋的。我真的看不到这些东西的任何用例。
-
异常的__toString()空返回更值得怀疑。