PHP,异常如何与常规类不同

时间:2017-10-09 07:32:25

标签: php exception

奇怪的是,我创建了一个具有相同接口的类,如基类Exception类,但不扩展/派生它。只是旧的普通PHP对象就像一个例外。我知道这不会像解释here那样有效,但无论如何都要尝试,因为所有异常都像普通类一样。

class MyException {

/**
* properties omitted
*/

 public function __construct( string $message = "",int $code)

 public function getMessage(void)

 //more methods
} 

// somewhere in code block

  throw new MyException("Fatal error");
  // Fatal error: exceptions must be valid objects derived from exception base class.

您能否解释一下异常与常规类不同的其他方式,以及它们如何在我们的代码中实现其特殊性。我知道这可能是一个愚蠢的问题,但我只是希望更多地了解异常如何运作。

2 个答案:

答案 0 :(得分:2)

例外是正常的课程。它必须扩展' Exception'因为PHP不想检查它是否具有所有必需的方法/属性(默认使用PHP异常处理程序)。

通过扩展类(或实现接口),您可以证明您的类具有类似' getMessage()'的方法。并且它不会抛出有关现有方法的错误。

它必须实现所有Throwable接口方法(http://php.net/manual/en/class.throwable.php):

Throwable {
    /* Methods */
    abstract public string getMessage ( void )
    abstract public int getCode ( void )
    abstract public string getFile ( void )
    abstract public int getLine ( void )
    abstract public array getTrace ( void )
    abstract public string getTraceAsString ( void )
    abstract public Throwable getPrevious ( void )
    abstract public string __toString ( void )
}

答案 1 :(得分:1)

Exception类只是程序员用来传递有关异常信息的容器(错误代码,消息,位置,堆栈跟踪,可能对处理异常有用的其他信息)程序的其他部分(其中有代码知道如何处理它)的程序的一部分(发生异常的地方)。

它的构造函数只是将它作为参数接收的值存储起来。其他方法只是吸气剂;它们用于从Exception对象中提取值。 Exception类没有实现任何行为。

除了要求延长Exception之外,没有什么特别之处。