为什么好多人写php的时候总是判断反逻辑呢?
程序员文章站
2022-05-16 23:31:58
...
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 的。 这个例子里,我倾向于楼主说的写法。但是如果异常太多,那就不要 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. 防御式编程。
{
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外面),避免多层嵌套。上一张图片,题主感受一下:
这是一种逗比式的防御式编程。正常的防御式编程是没有 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. 防御式编程。