用户友好的PHP尝试捕获

时间:2013-03-13 07:48:07

标签: php try-catch

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

这是我现在的代码:

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());
    }

}

1 个答案:

答案 0 :(得分:5)

最好用前端控制器解决这个问题,该控制器能够捕获所有未捕获的异常:

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

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

然后,您可以编写代码以返回内部服务器错误,因为异常表示异常情况,因此通常是500内部服务器错误。除了没有解决问题而你的程序崩溃之外,用户一定不会对出了什么问题感兴趣。

如果您抛出异常以提供验证通知,则需要捕获不同层中的异常(如果您使用异常,则可能是错误的。)


编辑:对于低级函数,因为PHP是松散类型的,如果函数需要和int,cast to intDocs

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

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

这个例子有点令人讨厌,因为通过方法的名称,您可以使用它来验证某个数字,如果没有,则提供错误(这里错误地引用了异常)。相反,你应该做一些验证。如果你期望输入错误,那么在提供错误输入的情况下并不是特例,所以我不会使用例外。