用户可以用自定义的异常处理类来扩展 PHP 内置的异常处理类。以下的代码说明了在内置的异常处理类中,哪些属性和方法在子类中是可访问和可继承的。
示例 #1 内置的异常处理类
<?php
class Exception implements Throwable
{
protected $message = 'Unknown exception'; // 异常信息
private $string; // __toString 的缓存
protected $code = 0; // 用户自定义异常错误码
protected $file; // 发生异常的源文件名
protected $line; // 发生异常的源代码行号
private $trace; // backtrace
private $previous; // 如果是嵌套异常,则是之前的 exception
public function __construct($message = '', $code = 0, Throwable $previous = null);
final private function __clone(); // 禁止克隆异常。
final public function getMessage(); // 异常信息
final public function getCode(); // 异常错误码
final public function getFile(); // 发生异常的源文件名
final public function getLine(); // 发生异常的源代码行号
final public function getTrace(); // backtrace() 数组
final public function getPrevious(); // 之前的 exception
final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
如果使用自定义的类来扩展内置异常处理类,并且要重新定义构造函数的话,建议同时调用 parent::__construct() 来确保所有的变量已赋值。当对象要输出字符串的时候,可以重载 __toString() 并自定义输出的样式。
注意:
不能 复制 Exception 对象。尝试对 clone Exception 会导致 fatal
E_ERROR
错误。
示例 #2 扩展 PHP 内置的异常处理类
<?php
class MyException extends Exception
{
// 重定义构造器使 message 变为必须被指定的属性
public function __construct($message, $code = 0, Throwable $previous = null) {
// 这里写用户的代码