PHP运行时或逻辑异常



在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

我将使用,因为数据集是静态的(因此在setFoo()中检查)。如果数据集是动态的,我会使用unexpectedvalue(因此在doSomethingWithFoo()中进行检查)。

相关内容

  • 没有找到相关文章

最新更新