eld*_*blz 3 php logic coding-style
我正在创建一个大型的PHP项目,我对如何继续进行一个微不足道的疑问.
假设我们有一个类books,在这个类我有方法ReturnInfo:
function ReturnInfo($id) {
if( is_numeric($id) ) {
$query = "SELECT * FROM books WHERE id='" . $id . "' LIMIT 1;";
if( $row = $this->DBDrive->ExecuteQuery($query, $FetchResults=TRUE) ) {
return $row;
} else {
return FALSE;
}
} else {
throw new Exception('Books - ReturnInfo - id not valid.');
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有另一种方法 PrintInfo
function PrintInfo($id) {
print_r( $this->ReturnInfo($id) );
}
Run Code Online (Sandbox Code Playgroud)
显然,代码示例仅是示例,而不是实际的生产代码.
在第二种方法中,我应该(再次)检查id是否为数字?或者我可以跳过它,因为在第一种方法中已经注意了,如果它不是异常将被抛出?
直到现在我总是用冗余支票编写代码(无论是否已在其他地方检查过,我也会在这里查看)
有最好的做法吗?只是常识吗?
提前感谢您的回复.
好吧,通过检查每一层,问问自己你获得了什么.它更安全吗?不,因为使用该值的函数(唯一一个易受攻击的函数)执行检查本身.
它唯一的优点是你可以提前停止无效值,从而执行更少的代码.在知道值无效之前,它不必一直向下和备份.这可能是也可能不是真正的优势.
它确实会产生问题:你有更多的代码.你的代码不再干了.如果更改"有效"值的定义,则必须更改所有地方的检查.那些是更大的问题.
我会以这种方式处理问题:您的核心业务模型执行详细检查,最终负责确保值有效,并且它是唯一一个使用此值执行"危险"操作的人.外层(控制器,视图)仅传递值.除了一个例外:他们可能会进行"粗略"的数据验证.假设您的模型需要具有特定格式的电话号码.您应该在模型中检查此特定规则.在视图/控制器层中,您可以大致验证该值至少在某种程度上是数字的.说,你有一个Javascript检查.这会阻止您的核心应用程序出现错误的错误值,同时仍然可以灵活地在一个地方调整核心验证规则.
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |