非空变量的简化测试

时间:2014-06-12 00:48:31

标签: php

我正在维护一些旧的PHP代码,我发现代码中有很多地方测试变量是否为以下形式的非空:

if (!(isset($field_name) && strlen($field_name) > 0))

就我的思维方式而言,以下更为简单的形式可以完全相同:

if ($field_name)

我是否错过了一些更复杂的形式更精确的子语言?我倾向于在需要添加新代码的任何地方使用更简单的表单。

4 个答案:

答案 0 :(得分:1)

您可以使用empty()替换第一行:

if (!empty($field_name))

第二个示例的问题是,如果未设置变量,它将生成警告。 empty()isset()都不会为不存在的变量生成警告。

请注意,您始终必须考虑可能的值,因此,如果您的值可以是0'0',那么这将不会像$var = 0;之后那样有效,empty($var)会评估到true

答案 1 :(得分:0)

他们做同样的事情。第一个代码示例:

  1. 检查$field_name是否存在(我认为!是无意的,因为它的写法并不合理)
  2. 检查$field_name字符串长度是否大于零
  3. 第二个代码示例:

    1. 检查变量是否具有布尔true
    2. 如果未设置$field_name,则会抛出错误。
    3. 第一个代码段在其意图中清除精确并执行特定任务。

      第二个片段非常基础,只验证变量是否具有布尔值(并且有更好的方法可以做到这一点)。如果$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

有什么区别?

  1. if($field_name)测试现有变量$field_name evaluates to TRUE。例如,它的值可能是“我的狗”,并且评估为TRUE
  2. if(!(isset($field_name))测试变量$field_name是否存在。