Php 非空变量的简化测试
我正在维护一些旧的PHP代码,我发现代码中有很多地方测试了以下形式的非空变量:Php 非空变量的简化测试,php,Php,我正在维护一些旧的PHP代码,我发现代码中有很多地方测试了以下形式的非空变量: if(!(isset($field\u name)&strlen($field\u name)>0)) 按照我的想法,以下简单得多的形式会做完全相同的事情: if ($field_name) 我是否遗漏了一个更复杂的形式更精确的子片段?我倾向于在任何需要添加新代码的地方使用更简单的表单。它们做的事情不同。第一个代码示例: 检查$field\u name是否存在(我认为!是无意的,因为它的编写方式没有意义) 检查$f
if(!(isset($field\u name)&strlen($field\u name)>0))
按照我的想法,以下简单得多的形式会做完全相同的事情:
if ($field_name)
我是否遗漏了一个更复杂的形式更精确的子片段?我倾向于在任何需要添加新代码的地方使用更简单的表单。它们做的事情不同。第一个代码示例:
$field\u name
是否存在(我认为!
是无意的,因为它的编写方式没有意义)$field\u name
的字符串长度是否大于零true
值$field\u name
,将引发错误$field\u name
包含字符串“0”,此代码段将导致难以发现的错误,因为它将失败,因为“0”的计算结果为false。第一个代码段将捕捉到这一点。如果$field为null、0、0.00、false或任何可以转换为false的内容,if($field)将失败
如果(!isset($field))
如果未声明$field,则将失败。您可以使用empty()
替换第一行:
if (!empty($field_name))
第二个示例的问题是,如果未设置变量,它将生成警告。empty()
和isset()
都不会为不存在的变量生成警告
请注意,您必须始终考虑可能的值,因此如果您的值可以是
0
或'0'
,这将不会像$var=0之后那样工作
,empty($var)
将计算为true
您发现的代码是奇数,这是正确的。它可能是:
if(!(isset($field_name)) { ... do something }
或
…正如您所理解的,不需要测试未定义变量的长度
然而,if($field\u name)
与if(!(isset($field\u name))
不一样,差别并不微妙。事实上,如果运气不好,$field\u name
没有定义,前者将为您赢得一个未定义变量:fieldname
有什么区别?
if($field\u name)
测试现有变量$field\u name
。例如,它的值可能是“my dog”,其计算结果为TRUE
if(!(isset($field\u name))
测试变量$field\u name
是否存在您应该检查PHP中的。它们是布尔值false、整数0、浮点值0.0、空字符串、字符串“0”,一个包含零元素的数组,空标记创建的null和SimpleXML对象。我忽略了指定0或其他falsy值在我们的系统中是非法的。因此我没有明确说明意图。我的感觉是答案中有价值,我可能会接受其中一个作为“答案”.我认为上面的第一行,无论其精度如何,都过于复杂。部分原因是它是一个复合条件,其中一个条件被否定。
if(isset($field_name) && strlen($field_name) > 0 ) { ... do something }