在这段代码中,我们输入$inputs [‘user_id’] 3次.
if (isset($inputs['user_id']) && $inputs['user_id']) { // The consumer is passing a user_id
doSomethingWith($inputs['user_id']);
}
什么是最可读和最强大的重构我可以做什么来避免重复并避免任何通知索引user_id不存在?
谢谢.
解决方法:
重复没有错.在检查变量是否已设置之前,您无法将$inputs [‘user_id’]赋值给变量,否则会生成一个通知未定义的索引….
这里唯一能做的就是省略isset调用并使用!empty,如下所示:
if(!empty($inputs['user_id'])) {
doSomething($inputs['user_id']);
}
现在你只输入两次并检查
!empty($inputs['user_id'])
等于
isset($inputs['user_id']) && $inputs['user_id']
编辑:根据评论,这里引用documentation:
The following things are considered to be empty:
06003
因此,无论是空(0)还是空(‘0’)都将返回true,这意味着
if(!empty('0') || !empty(0)) { echo "SCREW YOU!"; }
什么都不回应……或者,礼貌地说,我将重复上面的陈述:
!empty($inputs['user_id']) === (isset($inputs['user_id']) && $inputs['user_id'])
编辑2:
通过省略isset并替换为!empty,仍然会检查变量,无论索引是否已设置,请阅读documentation,其中说:
No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent to !isset($var) || $var == false.
标签:php,if-statement,code-duplication
来源: https://codeday.me/bug/20190825/1718835.html