【问题标题】:How much is too much restriction?过多的限制是多少?
【发布时间】:2012-10-08 09:00:25
【问题描述】:

我有一个函数可以设置搜索查询中歌曲所在的键。它来自c..b0..11,如果给定的“密钥”超出允许范围,它就会恢复到NULL。我是否应该抛出异常,而不是警告提供的 $key 超出允许范围?

代码如下:

<?php
function between($x, $y, $z) {
    return (($x <= $y) && ($y <= $z));
}

function setKey($key) {
    if (is_string($key)) {
        $key = array_search(strtolower($key), array("c", "c-sharp", "d", "e-flat", "e", "f", "f-sharp", "g", "a-flat", "a", "b-flat", "b"));
    } else {
        $key = (!between(0, $key, 11)) ? false : $key;
    }
    return (!$key) ? null : $key;
}

var_dump(setKey("g"))."\n";
var_dump(setKey("r"))."\n";
var_dump(setKey(2))."\n";
var_dump(setKey(12))."\n";

输出:

int(7)
NULL
int(2)
NULL

【问题讨论】:

  • 在这里发布函数而不是链接到场外怎么样?

标签: php error-handling user-input validation


【解决方案1】:

这里有两个不同的问题。

首先是验证输入是否在允许的范围内,并在用户输入超出范围的值时向用户提供反馈。您绝对应该执行此验证。在可能的情况下,在用户开始输入之前让这些值对用户显而易见,或者以消除错误可能性的方式呈现选择。

第二个问题是是否应该抛出异常。理想情况下,仅当您的程序在当前状态下无法执行或继续可能导致数据损坏时,才应以这种方式引发异常。我认为您的情况并非如此,因为您只是在执行读取。

对于您的特定场景,我会使用验证,但不使用例外。我已经包含了额外的细节,以便具有微妙不同场景的人们在遇到问题时可以做出明智的决定。

【讨论】:

    【解决方案2】:

    是的,让用户知道他们的输入超出范围总是一个好主意。这很可能是用户乐于了解和纠正的错字。

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 2014-12-12
      • 2012-05-20
      • 2017-03-13
      • 2018-08-02
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多