首页  >  文章  >  后端开发  >  为什么好多人写php的时候总是判断反逻辑呢?

为什么好多人写php的时候总是判断反逻辑呢?

WBOY
WBOY原创
2016-06-06 16:44:52894浏览

function get_post($index = '', $xss_clean = FALSE)
{
if ( ! isset($_POST[$index]) )
{
return $this->get($index, $xss_clean);
}
else
{
return $this->post($index, $xss_clean);
}
}

比如ci源码中的get_post函数,为什么不直接这样写:
if ( isset($_POST[$index]) )
{
return $this->post($index, $xss_clean);
}
else
{
return $this->get($index, $xss_clean);
}

回复内容:

页面加载时候要判断参数的合法性,如果不合法就直接打印出错误信息然后结束。所以不合法情况的代码要比另外一种情况短得多。另外,由于不合法情况已经退出了,后面的代码可以捋直(写在else外面),避免多层嵌套。

上一张图片,题主感受一下:

为什么好多人写php的时候总是判断反逻辑呢? 这是一种逗比式的防御式编程。正常的防御式编程是没有 else 的。 这个例子里,我倾向于楼主说的写法。但是如果异常太多,那就不要 else 了。碰到错误就返回。 有一种风格叫防御式编程,这是基本做法之一。 因为不是预编译的语言,所以会把异常状态写到代码前面,出现异常的时候,尽早结束脚本。 补充一下:参考《重构:改善既有代码的设计》第 9 章 - 简化条件表达式
Replace Nested Conditional with Guard Claused(以卫语句取代嵌套条件表达式) 谢谢大家的回答,这个问题主要是涉及到编程模式和人的思维两个方面。主要有两种方式可以表达:



if ( isset($_POST[$index]) )
{
return $this->post($index, $xss_clean);
}
else
{
return $this->get($index, $xss_clean);
}



还有以下的防御式:


function get_post($index = '', $xss_clean = FALSE)
{
if ( ! isset($_POST[$index]) )
{
return $this->get($index, $xss_clean);
}

return $this->post($index, $xss_clean);
} 个人觉得是思维的问题
如果没有设置则。。否则。。
也可能和人的期望有关
======
这里的代码主要是优先级的问题吧,post优先级高于get所以先看下post是否存在 1. 为了尽可能地减少缩进的使用。
2. 防御式编程。
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn