2014-06-12 30 views
0

我保持一些旧的PHP代码,我发现代码中的一个测试很多地方的变量是非空的形式如下:简化测试非空的变量

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

要我思维方式,下面简单得多的形式会做同样的事情:

if ($field_name) 

我失去了一些subltety由此更复杂的形式是更精确?我倾向于在任何需要添加新代码的地方使用更简单的表单。

+0

你应该在PHP中查看[值为false的列表](http://www.php.net//manual/en/language.types.boolean.php)。那些布尔值为false,整数0,浮点数0.0,空字符串,字符串“0”,零元素数组,空元素和由空标记创建的SimpleXML对象。 – Marty

+0

我忽略了在我们的系统中指定0或其他的falsy值是非法的。所以我没有明确说明意图。我的感觉是答案中有价值,我可能会接受其中的一个作为“答案”。我相信上面的第一行,无论其精度如何,都过于复杂。部分原因是因为它是一个条件否定的复合条件。 –

回答

0

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

  1. 检查是否存在$field_name(我的数字!是无意的,因为它不使感测它被写入的方式)
  2. 检查是否$field_name有一个字符串长度大于零

第二代码示例:

  1. 检查该变量具有布尔true
  2. 如果没有设置$field_name,会抛出错误。

第一个代码段是在其意图清楚精确,并执行特定的任务。

第二个片段是非常基本的,只验证变量是否具有布尔真值(并且有更好的方法可以做到这一点)。如果$field_name包含一个字符串“0”,这段代码将导致难以发现错误,因为它会失败,因为“0”的计算结果为false。第一个片段可以解决这个问题。

0

如果要是$字段为空($域)将会失败,0,0.00,虚假或任何可以铸造假

如果(!isset($场))

会失败,如果$现场并没有在所有

1

被宣布可以使用empty(),以取代第一行:

if (!empty($field_name)) 

与你的第二个例子的问题是,它会产生,如果VA警告没有设置riable。 empty()isset()都不会为不存在的变量生成警告。

需要注意的是,你总是必须考虑到可能的值,所以如果你的价值可以0'0',这将无法正常工作后$var = 0;empty($var)将评估为true

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_nameevaluates to TRUE。例如,它的值可能是“我的狗”,并且评估为TRUE
  2. if(!(isset($field_name))测试是否存在变量$field_name