根据我的经验,我会说一般来说,错误抑制对于未来的开发人员来说只是另一种不好的做法,应该尽可能避免,因为它隐藏了错误的复杂性并防止错误记录,而 Exception 可以帮助开发人员获得错误快照。但是回答说“如果是这样,你会在什么情况下使用它? ”的原始问题。
我会说应该将它用于一些不会引发异常错误的遗留代码或库,而是通过将错误变量与其对象(说到 OOP)或使用全局变量来记录错误或仅打印错误来处理错误错误全部一起。
以 mysqli 对象为例
new mysqli($this->host, $this->username, $this->password, $this->db);
上面的这段代码几乎不会或从不会在连接失败时抛出异常,它只将错误存储在mysqli::errno
和mysli::error
对于现代编码,我发现的一种解决方案是抑制丑陋的错误消息(这对任何人都没有帮助,尤其是在调试模式关闭的生产服务器上),而开发人员应该抛出自己的异常。这是考虑现代实践并帮助编码人员更快地跟踪错误。
$this->connection = @new mysqli($this->host, $this->username, $this->password, $this->db);
if($this->connection->connect_errno)
throw new mysqli_sql_exception($this->connection->error);
您可以注意到使用抑制@
符号来防止在开发服务器上打开错误显示时出现难看的错误显示。
我也不得不抛出我自己的异常。这样我就可以使用@
符号,同时我没有隐藏错误,也没有自己猜测错误可能是什么。
我会说,如果使用得当,那是有道理的。