1

extend Exceptionクラスには何を入れて、どのように使用できますか? ご覧のとおり、エラー処理をcatchブロックに含めました。

例えば:

class Manager {

    private $socket = null;

    private $config = array();

    public function connect($host = null, $port = null) {

        if ($host == null || $port == null) {
            throw new PortHostNotGivenException('Host or Port is missing');
        }

        $this->socket = fsockopen($host,$post);

    }
}


class PortHostNotGivenException extends Exception {
    // What to put here??
 } 

テスト:

$ast = new Manager();

    try {
      $ast->connect();
    } catch (PortHostNotGivenException $e) {
       // Log Error to File
       // Log Error to Linux Console
       echo $e . '/r/n';
       exit();
    }
4

2 に答える 2

1

複数の異なる例外をキャッチして、それらを異なる方法で処理できます。

try {
    $this->db->save();
} catch (ConnectionException $e) {
    if ($this->db->reconnect()) {
        // try again
    } else {
        throw new CannotReconnectException();
    }
} catch (ValidationException $e) {
    // display validation error messages
} catch (Exception $e) {
    // save failed with a general or unexpected error
}

予期しないエラーを妨げずに、予期されるエラーを静かに処理することもできます。

try {
  ...
} catch (VendorApiException $e) {
    return false;
}

上記の例で aVendorApiExceptionがスローされた場合、コードは単に false を返します。他の例外がスローされた場合、このcatchブロックによってキャプチャされず、代わりにバブルアップします。上位の try/catch ブロックがない場合は、プロセスの例外ハンドラによって処理されます。

ユーザー定義の例外の本体

// ここに何を置く??

例外プロパティのいずれかをオーバーライドする理由がない場合は、何も入れないでください。何も入れないでください。通常、 acodeとを定義し、文字列ではない amessageを渡す場合は、コンストラクターをオーバーライドする可能性があります。$message

于 2013-03-06T23:19:39.403 に答える
1

そこに何も置く必要はありません。例外を拡張する目的は、主に、キャッチしている例外を「フィルタリング」することです。

たとえば、CustomConfigNotFoundException と DatabaseException があり、ここで言うことができるのは、当面はデフォルトを使用できるため、カスタム構成は必要ありませんが、データベースがないと台無しになるためです...したがって、catch(CustomConfigNotFoundException e) を使用してロードできますデフォルトの構成で、例外を使用するプログラム/スクリプト/ページを DatabaseException で停止させます。

于 2013-03-06T23:24:06.030 に答える