gpt4 book ai didi

PHP 运行时或逻辑异常?

转载 作者:可可西里 更新时间:2023-11-01 00:05:58 25 4
gpt4 key购买 nike

在 PHP 中,如果一个值被认为是“未知的”(本身并不无效),这是否会引发逻辑异常或运行时异常?

<?php
function foo($bar) {
// logic
if(!is_string($bar)) {
throw new \InvalidArgumentException('invalid *argument*');
}
if(strlen($bar) < 4) {
throw new \DomainException('invalid *bar*');
}
static $knownBars = array('bar1', 'bar2');
if(!in_array($knownBars)) {
throw new \DomainException('unknown *bar*');
//throw new \UnexpectedValueException('unknown *bar*');
}

// runtime
$bar;
}

前两个异常是显而易见的,但最后一个对我来说仍然有点不清楚。两者似乎都有道理;一个逻辑/域错误,因为我们期望一个已定义的数据集,一个运行时/意外值错误,因为我们实际上得到了一个意外的值。

我应该扔哪个?

另外,如果逻辑部分是单个 setter 方法并且我们想用数据库查找替换静态数组(数据集)怎么办......是否可以预期逻辑代码中由于数据库故障等导致的运行时异常? ?或者我们是否应该将数据库查找移动到运行时代码,如果“bar”被认为是未知的,仍然抛出逻辑异常?

最佳答案

逻辑异常是针对编译时发生的错误。由于 PHP 在这个意义上没有编译时间,它通常被解释为“在开发过程中发生的错误”,(比如当开发人员忘记传递依赖项或其他东西时)而运行时异常是针对不可预见的错误(通常源于用户在代码运行时输入)。

不过坦白说,整个Spl Exception层级都是Fubar。因此,只需使用您想要的或创建您自己的。

另见 https://wiki.php.net/rfc/spl-improvements/exceptions

关于PHP 运行时或逻辑异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171714/

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