PHP运行时还是逻辑异常?
在PHP中,如果一个值被认为是“未知”(本身不是无效的),这是否会引发逻辑或运行时异常PHP运行时还是逻辑异常?,php,exception,runtime,logic,Php,Exception,Runtime,Logic,在PHP中,如果一个值被认为是“未知”(本身不是无效的),这是否会引发逻辑或运行时异常 <?php function foo($bar) { // logic if(!is_string($bar)) { throw new \InvalidArgumentException('invalid *argument*'); } if(strlen($bar) < 4) { throw new \DomainExceptio
<?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;
}
逻辑异常适用于编译时发生的错误。由于PHP没有编译时间,这意味着,它通常被解释为“开发过程中发生的错误”(如开发人员忘记传递依赖关系或其他),而运行时异常是代码运行时出现的不可预见的错误(通常源于用户输入)
但坦率地说,整个Spl异常层次结构都是Fubar。所以,只要使用你想要的或创造你自己的
另请参见我将使用域,因为数据集是静态的(因此在setFoo()
中进行了签入)。。。如果数据集是动态的(因此在doSomethingWithFoo()
中签入),我会选择unexpectedvalue
。(相关)(相关)我参加聚会有点晚,但我建议忘记SPL异常曾经存在,除非您需要捕获SPL中某个地方抛出的异常(很少发生)。我试图在这里建立一个更合理的层次结构:给出的任何答案都解决了你的问题吗?如果是,请接受答案,以便将问题标记为已解决。如果没有,请更新您的问题,并指出为什么到目前为止给出的答案都没有帮助。创建您自己的。。所以如果UnknownBarException从\LogicException或\Runtime..扩展:P我想我会使用逻辑,因为“未知x”意味着x有一个已知的数据集。@RolandFranssen from Exception。使用RuntimeException和LogicException的唯一原因是为了语义。Imho\DomainException(>Logic>Exception)作为UnknownBar始终意味着为条形图(域)定义了一个数据集,我喜欢维护该语义。@Roland DomainException也很容易成为运行时异常,因为它引用,例如,函数的有效输入范围。如果用户提供的值超出该范围,则显然不是逻辑异常。“如果用户提供值”,用户是谁?开发商?因为据我所知,开发人员在定义的范围外传递值/参数显然是一个逻辑错误。