gpt4 book ai didi

php - Exception、InvalidArgumentException 或 UnexpectedValueException 之间有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 12:31:48 25 4
gpt4 key购买 nike

什么时候应该使用 Exception、InvalidArgumentException 或 UnexpectedValueException?

我不知道它们之间的真正区别,因为我一直使用 Exception。

最佳答案

不同的异常只会让您更精细地控制捕获和处理异常的方式。

考虑一个你正在做很多事情的类(class) - 例如获取输入数据,验证输入数据,然后将其保存在某处。您可能会决定,如果将错误的参数或空参数传递给 get() 方法,您可能会抛出一个 InvalidArgumentException。验证时,如果出现异常或不匹配,您可以抛出 UnexpectedValueException。如果发生完全意外的事情,您可以抛出标准的 Exception

这在您捕获时非常有用,因为您可以用不同的方式处理不同类型的异常。例如:

class Example
{
public function get($requiredVar = '')
{
if (empty($requiredVar)) {
throw new InvalidArgumentException('Required var is empty.');
}
$this->validate($requiredVar);
return $this->process($requiredVar);
}

public function validate($var = '')
{
if (strlen($var) !== 12) {
throw new UnexpectedValueException('Var should be 12 characters long.');
}
return true;
}

public function process($var)
{
// ... do something. Assuming it fails, an Exception is thrown
throw new Exception('Something unexpected happened');
}
}

在上面的示例类中,调用它时您可以捕获多种类型的异常,如下所示:

try {
$example = new Example;
$example->get('hello world');
} catch (InvalidArgumentException $e) {
var_dump('You forgot to pass a parameter! Exception: ' . $e->getMessage());
} catch (UnexpectedValueException $e) {
var_dump('The value you passed didn\'t match the schema... Exception: ' . $e->getMessage());
} catch (Exception $e) {
var_dump('Something went wrong... Message: ' . $e->getMessage());
}

在这种情况下,您会得到一个 UnexpectedValueException,如下所示:string(92)“您传递的值与架构不匹配...异常:Var 的长度应为 12 个字符。 ".

还应该注意的是these exception classes all end up extending from Exception无论如何,如果您没有为 InvalidArgumentException 或其他异常定义特殊的处理程序,那么它们无论如何都会被 Exception 捕获程序捕获。真的,为什么不使用它们呢?

关于php - Exception、InvalidArgumentException 或 UnexpectedValueException 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com