由于我在短时间内使用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());
}
}
答案 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将为您抛出异常。
这个例子有点令人讨厌,因为通过方法的名称,您可以使用它来验证某个数字,如果没有,则提供错误(这里错误地引用了异常)。相反,你应该做一些验证。如果你期望输入错误,那么在提供错误输入的情况下并不是特例,所以我不会使用例外。