奇怪的是,我创建了一个具有与基Exception
类相同的接口(interface)的类,但没有从它扩展/派生。只是旧的普通 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.
您能否解释一下异常与常规类的其他不同之处,以及它们如何在我们的代码中实现异常的角色。我知道这可能是一个愚蠢的问题,但我只是希望更多地了解异常是如何工作的。
最佳答案
异常是正常的类。它必须扩展“Exception”,因为 PHP 不想检查它是否具有所有必需的方法/属性(默认 PHP 异常处理程序使用)。
通过扩展类(或实现接口(interface)),您可以证明您的类具有“getMessage()”等方法,并且不会抛出有关不存在方法的错误。
它必须实现所有 Throwable 接口(interface)方法 ( 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 )
}
关于PHP,异常与常规类有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640969/