【发布时间】:2019-06-13 18:28:04
【问题描述】:
我想知道在没有 try/catch 语句的情况下抛出异常是一种好习惯。例如
/// 类驱动
class Driver{
public function setAge($age)
if(is_string($age)){
throw new StringException('Age can not be string')
}
if($age>100){
throw new TooLargeNumberException('Age is too large')
}
}
///控制器
$d= new Driver()
$d->setAge(101) /// return TooLargeNumberException
或者
try{
$d= new Driver()
$d->setAge(101)
}
catch(StringException $e){
return $e->getMessage()
}
catch(TooLargeNumberException $e){
return $e->getMessage()
}
请告诉我如何处理异常。哪种解决方案是正确的?是否一定要使用 always try/catch 语句?
【问题讨论】:
-
您是否应该向用户抛出异常或如何最好地处理整个应用程序中的异常?
-
IMO,您处理整个过程都错了。只需通过
$driver->age = 50;设置年龄(或者更好的是,存储生日代替)。通过验证修改年龄的请求来处理限制。 -
使用表单验证laravel.com/docs/5.8/validation#validation-quickstart,这样您就可以优雅地向用户返回有关他们需要修复的错误。
-
我想知道如何最好地处理跨应用程序的异常。请不要关心示例的内容。我的代码只是抛出异常的简单示例。我知道 laravel 有异常处理程序,它有助于创建错误视图。我学习 laravel,但我的问题对 PHP 来说是一般性的。是否必须使用 always try/catch 语句?像第一个例子一样只使用 throw 语句是不好的做法吗?我看不出这两个例子之间的区别。结果是一样的。这就是我的问题的原因。 try/catch 语句有什么好处?