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 块,它将由进程异常处理程序处理

用户定义异常的主体

// 这里放什么??

任何东西或什么都没有——如果你没有理由重写任何异常属性——不要在里面放任何东西。通常,您可以定义 a codeand message,如果您传递的 a$message不是字符串,则可能会覆盖构造函数。

于 2013-03-06T23:19:39.403 回答
1

你不需要在那里放任何东西。扩展和异常的目的主要是“过滤”你正在捕获的异常。

例如,您有一个 CustomConfigNotFoundException 和一个 DatabaseException ,您可以在其中说我不需要自定义配置,因为我暂时可以使用默认值,但是没有数据库,您就搞砸了……所以您可以使用 catch(CustomConfigNotFoundException e) 加载默认配置,只要让 DatabaseException 停止你的程序/脚本/页面,无论你使用你的异常。

于 2013-03-06T23:24:06.030 回答