我正在维护一些旧的PHP代码,我发现代码中有很多地方测试变量是否为以下形式的非空:
if (!(isset($field_name) && strlen($field_name) > 0))
就我的思维方式而言,以下更为简单的形式可以完全相同:
if ($field_name)
我是否错过了一些更复杂的形式更精确的子语言?我倾向于在需要添加新代码的任何地方使用更简单的表单。
答案 0 :(得分:1)
您可以使用empty()
替换第一行:
if (!empty($field_name))
第二个示例的问题是,如果未设置变量,它将生成警告。 empty()
和isset()
都不会为不存在的变量生成警告。
请注意,您始终必须考虑可能的值,因此,如果您的值可以是0
或'0'
,那么这将不会像$var = 0;
之后那样有效,empty($var)
会评估到true
。
答案 1 :(得分:0)
他们不做同样的事情。第一个代码示例:
$field_name
是否存在(我认为!
是无意的,因为它的写法并不合理)$field_name
字符串长度是否大于零第二个代码示例:
true
值$field_name
,则会抛出错误。第一个代码段在其意图中清除和精确并执行特定任务。
第二个片段非常基础,只验证变量是否具有布尔值(并且有更好的方法可以做到这一点)。如果$field_name
包含字符串" 0"这个片段会导致很难发现错误,因为它会失败,因为" 0"评估为假。第一个片段会抓住这个。
答案 2 :(得分:0)
if($ field)如果$ field为null,0,0.00,false或任何可以转换为false的内容将失败
如果(!isset($场))
如果$ field尚未声明,将失败
答案 3 :(得分:0)
你找到的代码很奇怪你是对的。它应该是:
if(!(isset($field_name)) { ... do something }
或
if(isset($field_name) && strlen($field_name) > 0 ) { ... do something }
...如您所知,没有必要测试未定义的变量的长度。
但是,if($field_name)
与if(!(isset($field_name))
不同,差异并不明显。事实上,如果没有定义运气不好Undefined variable: fieldname
,前者会给你一个$field_name
。
有什么区别?
if($field_name)
测试现有变量$field_name
evaluates to TRUE
。例如,它的值可能是“我的狗”,并且评估为TRUE
if(!(isset($field_name))
测试变量$field_name
是否存在。