Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP运行时还是逻辑异常?_Php_Exception_Runtime_Logic - Fatal编程技术网

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中,如果一个值被认为是“未知”(本身不是无效的),这是否会引发逻辑或运行时异常

<?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也很容易成为运行时异常,因为它引用,例如,函数的有效输入范围。如果用户提供的值超出该范围,则显然不是逻辑异常。“如果用户提供值”,用户是谁?开发商?因为据我所知,开发人员在定义的范围外传递值/参数显然是一个逻辑错误。