【发布时间】:2012-12-19 18:02:29
【问题描述】:
在 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”被认为是未知的,仍然会抛出逻辑异常?
【问题讨论】:
-
我参加聚会有点晚了,但我建议忘记 SPL 异常曾经存在,除非您需要捕获在 SPL 中某处抛出的异常(很少发生)。我正在尝试在这里建立一个更理智的层次结构:github.com/morrisonlevi/Ardent/blob/master/Exceptions.md
-
给出的答案是否解决了您的问题?如果是这样,请接受答案,以便将问题标记为已解决。如果没有,请更新您的问题并指出为什么到目前为止给出的答案都没有帮助。
标签: php exception runtime logic