微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么大型框架会忽略前提条件检查?

如何解决为什么大型框架会忽略前提条件检查?

| 据我所知,检查前提条件是一种好习惯。如果一个方法需要一个int值,那么使用以下方法一个很好的解决方案:
public function sum($input1,$input2) {
if (!is_int($input1)) throw new Exception(\'Input must be a integer\');
但是,在查看Zend / Codeigniter的源代码之后,我很少看到这种检查。是否有一个原因 ?     

解决方法

因为在使用每个变量之前测试每个变量非常困难/效率低下。取而代之的是,他们只检查输入变量-在门口而不是在屋子里一次检查访客。 当然,在使用更重要的var之前测试它们是一种很好的防御性编程技术,特别是如果输入来自许多地方时。 这有点题外话,但是我建议的解决方案是测试输入变量,如下所示:
$username=get(\'username\',\'string\');
$a=get(\'a\',\'int\');
...
$ _REQUEST和类似内容绝对不能直接使用(甚至不可访问)。 另外,在进行HTML输出时,应始终使用以下命令:
echo html($username); // replaces \'<\' with \'&lt;\' - uses htmlentities
为了避免SQL注入攻击,可以使用MeekroDB,但这很有限(仅限MySQL,仅单个DB ...)。它有一个不错的API,尽管它可以提高安全性,所以我建议您检查一下。 我自己为我建立了一个基于PDO并使用准备好的语句的小型数据库库。 YMMV。     ,在任何情况下都不需要指定这样严格的前提条件,并且在动态类型化语言中感觉没有用。
$sum = sum(\"1\",\"2\");
为什么要禁止它?另外,如果抛出异常,则会尝试避免它。这意味着,他将进行测试并投下自己
function sum ($a,$b) {
  if (!is_int($a)) throw new Exception(\'Input must be a integer\');
  if (!is_int($b)) throw new Exception(\'Input must be a integer\');
  return $a + $b;
}

if (!is_int($value1)) { $value1 = (int) $value1; }
if (!is_int($value2)) { $value2 = (int) $value2; }
$sum = sum($value1,$value2);
为了避免不必要的异常,每个“ 5”会发生多次。 当您收到值时,它足以验证值,而不是整个应用程序。     ,说到ZF,我想说的是他们试图通过使用接口和类来最小化ZF。您可以在ZF的许多定义中看到如下所示:
public function preDispatch(Zend_Request_Http $request)
够了同样,在需要整数/字符串的关键位置,也要进行完整性检查。但是大多数不是以ѭ7的形式出现,而是以ѭ8的形式出现,它调用其他类来检查有效性。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。