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

标签 php exception

奇怪的是,我创建了一个具有与基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/

相关文章:

php - 在生产服务器上使用 PHP CURL 库发布数据时出错

java - 无法创建 Android PHP MySQL 登录应用程序

ios - 发送到实例怪异的无法识别的选择器

java - 在 Java 中将未检查的异常包装为已检查的异常

java - 为什么方法不抛出异常

java - 错误处理(Java)

php - 表单提交未按预期工作

javascript - 在 codeigniter 中使用 javascript 使用 json 数据填充数据表

php - 从 Laravel 集合转换数组

exception - PHPUnit 模拟异常