繁体   English   中英

多少限制太多?

[英]How much is too much restriction?

我有一个功能,可以设置歌曲在搜索查询中的键。 它从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

这里有两个单独的问题。

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

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

对于您的特定情况,我将使用验证,但不会使用例外。 我提供了其他详细信息,以便情景稍有不同的人们在遇到问题时可以做出明智的决定。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM