奇怪的是,我创建了一个具有相同接口的类,如基类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.
您能否解释一下异常与常规类不同的其他方式,以及它们如何在我们的代码中实现其特殊性。我知道这可能是一个愚蠢的问题,但我只是希望更多地了解异常如何运作。
答案 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)