2012-10-18 96 views
0

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

如何在这里发布功能,而不是链接到现场? – Joe

回答

0

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

1

这里有两个不同的问题。

第一个验证输入是否在允许范围内,如果输入的值超出范围,则向用户提供反馈。你一定要执行这个验证。在可能的情况下,在用户开始输入内容之前让这些值显而易见,或者以避免错误可能性的方式提供选择内容。

第二个问题是应该抛出异常。理想情况下,只有当程序在当前状态下无法执行时,才会以这种方式提出异常,否则应继续执行,从而导致数据损坏。我不认为这是你的情况,因为你只是在进行阅读。

对于您的具体情况,我会使用验证,但不是例外。我已经包含了额外的细节,因此,在遇到问题时,具有细微差异情景的人们可以做出明智的决定。