我正在尝试在我的新 PHP 项目中实现自己的异常处理,我还没有遇到任何错误,但我担心我的架构不正确,让我告诉你我的意思。我目前正在实现一个系统,可以处理某些类型的文件,编写它们,删除它们,创建它们等等,当然,我需要注意很多事情,所以很多事情都可能出错,所以我做了以下结构,但我觉得我重复自己太多了。所以,我把它作为我的主要异常类,我的所有自定义异常都将扩展:abstract class PickleException extends Exception implements Throwable{ abstract protected function handle () : void;}我做了以下两个例外,目前做同样的事情class DuplicateFileException extends PickleException{ public function handle() : void { echo $this->getMessage(); }}class InvalidCreationDirectoryException extends PickleException{ public function handle() : void { echo $this->getMessage(); }}现在,让我展示一下文件系统是如何组织的。 FileManager -- Interface FileSystem -- Abstract class (Parent) PHPManager -- Class (Child) YamlManager -- Class (Child) XMLManager -- Class (Child)现在,我知道我可以在这些类中的任何一个中抛出新的异常,但问题取决于我在哪里捕捉它们?到目前为止,我有这样的东西......abstract class FileSystem implements FileManager{ /** * Creates an empty file based on the path, name and extension * given. * * @param string $path * @param string $name * @param string $extension * @throws DuplicateFileException * @throws InvalidCreationDirectoryException * @return void */ final function makeEmptyFile (string $path, string $name, string $extension) : void { $file = "$path/$name.$extension"; if (!file_exists($path)) { if (!mkdir($path, 0777, true)) { throw new InvalidCreationDirectoryException("Error: Impossible to create directory"); } } if (file_exists($file)) { throw new DuplicateFileException("Warning: File already exists, aborting"); } touch($file); }}换句话说。捕获我抛出的所有异常的正确位置在哪里?
1 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
没有一个“正确”的地方可以捕获异常,也没有一种方法可以“处理”它们。
理想情况下,您可以在代码中的某个位置捕获它们,在那里您可以实现逻辑来解决原因,例如:重试,或优雅地处理故障,例如:关闭连接并中止。很少有一种万能的解决方案。
否则,不要抓住它们。未捕获的异常应该冒泡到全局异常处理程序并被视为致命错误。这是唯一的“一般”情况异常处理程序,PHP 的默认值是致命错误和堆栈跟踪。您可能想要自定义它以将异常记录到磁盘并显示“糟糕,出了点问题”。给用户的消息。
像这样的块:
try {} catch( \Exception $e ) {
echo $e->getMessage();
}
或者
try {} catch( \Exception $e ) {}
相当于将其变成信息警报并忽略它。
TL;DR:除非您打算做一些有意义的事情,否则根本不要捕获异常。
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消