Heim  >  Artikel  >  Backend-Entwicklung  >  为什么好多人写php的时候总是判断反逻辑呢?

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

WBOY
WBOYOriginal
2016-06-06 16:44:52897Durchsuche

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. 防御式编程。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn