1

由于很短的时间,我正在使用 PHP 中的 Try Catch。现在,每次抛出一个新错误时,你都会在屏幕上看到一个致命错误,这对用户来说并不友好,所以我想知道是否有办法给用户一个很好的消息,比如回显而不是致命错误。

这是我现在的代码:

public static function forceNumber($int){
    if(is_numeric($int)){
        return $int;
} else {
        throw new TypeEnforcerException($int.' must be a number');
}
}

public function setStatus($status) {
    try {
        $this->status = TypeEnforcer::forceInt($status); 
    } catch (TypeEnforcerException $e) {
        throw new Exception($e->getMessage());
    } catch (Exception $e) {
        throw new Exception($e->getMessage());
    }

}
4

1 回答 1

5

最好使用能够捕获所有未捕获异常的前端控制器来解决此问题:

<?php
require('bootstrap.php');

try {
    $controllerService->execute($request);
} catch (Exception $e) {
    $controllerService->handleControllerException($e);
}

然后,您可以编写代码以返回内部服务器错误,因为异常表示异常情况,因此通常是 500 内部服务器错误。用户不能对出了什么问题感兴趣,除非它只是没有成功并且你的程序崩溃了。

如果您抛出异常以提供验证通知,则需要在不同的层中捕获这些异常(如果为此使用异常,您可能做错了)。


编辑:对于低级函数,因为 PHP 是松散类型的,如果函数期望和 int,则强制转换为 int Docs

public static function forceNumber($int){
    $int = (int) $int;
    return $int;
}

这实际上会强制整数。如果无法进行强制转换(例如$int,它完全不兼容),PHP 将为您抛出异常。

这个例子有点尴尬,因为通过方法的名称,您可以使用它来验证某个数字并在没有的情况下提供错误(这里错误地出现异常)。相反,您应该进行一些验证。如果您期望输入错误,那么在提供错误输入时这不是例外情况,因此我不会为此使用例外。

于 2013-03-13T08:00:52.470 回答