在PHP 7的文档中,我注意到两个预定义的异常,Error
和ErrorException
几乎完全相同,ErrorException
具有额外的$severity
属性,Error
仅在PHP 7中引入,而ErrorException
从PHP 5.1开始就存在了。
据我所知,Error
是一个异常,我应该用它来捕获所有内部PHP错误,比如类型错误,但我不知道ErrorException
异常的目的是什么。它们中的每一个有什么用,我应该以它们中的任何一个为基础进行自定义异常,还是应该坚持使用通常的Exception
?
您可以从该页面了解Error
类的用途,该页面描述php 中的错误
PHP 7改变了PHP报告大多数错误的方式。而不是通过传统错误报告机制报告错误PHP 5使用,现在大多数错误都是通过抛出错误来报告的例外情况。
Error
页面上的描述相同:
Error是所有内部PHP错误的基类。
因此,您不应该将此类用于用户定义的异常。
你可以从这个好的SO问题/答案中获得ErrorException
的目的:
ErrorException主要用于转换php错误(由error_reporting)到异常
但是在php7中,您不需要将php错误转换为Exception。
因此,您基本上应该扩展简单的Exception
,或者您可以在标准情况下使用这些预定义的SPL异常集(例如InvalidArgumentException
、OutOfBoundsException
、BadFunctionCallException
…)
除了@alexander.polomodov和@kael之外,下面的层次结构可能有助于可视化支持/内置的异常类型,可以使用这些类型来代替通用的Exception
或Throwable
,因为如果捕捉不适当,这些类型有时会导致非常意外的行为。
Lists of Throwable and Exception tree as of 8.1.0
Error
ArithmeticError
DivisionByZeroError
AssertionError
CompileError
ParseError
FiberError
TypeError
ArgumentCountError
UnhandledMatchError
ValueError
Exception
ClosedGeneratorException
DOMException
ErrorException
IntlException
JsonException
LogicException
BadFunctionCallException
BadMethodCallException
DomainException
InvalidArgumentException
LengthException
OutOfRangeException
PharException
ReflectionException
RuntimeException
OutOfBoundsException
OverflowException
PDOException
RangeException
UnderflowException
UnexpectedValueException
SodiumException
在以下链接中查找脚本和输出:
https://gist.github.com/mlocati/249f07b074a0de339d4d1ca980848e6a
https://3v4l.org/f8Boe
来源:https://www.php.net/manual/en/class.error.php#126795通过dams at php dot net
、whysteepy at gmail dot com
]
有趣的是,StackOverflow上的语法高亮库还没有对8.0+的更改进行着色(截至2021-01;https://i.stack.imgur.com/c5MSn.png)