1. ホーム
  2. php

[解決済み] ErrorExceptionとExceptionの使い分けは?

2022-02-25 10:39:02

質問

PHP 5.1 で導入された エラー例外 . この2つの関数のコンストラクタは以下のように異なっています。

public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )

どちらを使うべきかの違いはありますか?

上記の使用例は間違っているのでは?

<?php
class Data {
    public function save () {
        try {
            // do something
        } catch (\PDOException $e) {
            if ($e->getCode() == '23000') {
                throw new Data_Exception('Foo Bar', $e);
            }

            throw $e
        }
    }
}

class Data_Exception extends ErrorException /* This should not be using ErrorException */ {}

うまくドキュメント化されていないのですが、どうやら ErrorException は、元の例のように、カスタムエラーハンドラから明示的に使用するように設計されています。 http://php.net/manual/en/class.errorexception.php .

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

解決方法は?

ErrorException は、ほとんどの場合、PHPのエラー( エラー報告 に変換します。 Exception .

を直接使用することは避けるべきです。 Exception これは幅が広すぎます。このサブクラスには、特定の Exception または 定義済みSPL例外

あなたの編集に従うこと : はい、拡張します Exception よりも ErrorException .