我保持一些旧的PHP代码,我发现代码中的一个测试很多地方的变量是非空的形式如下:简化测试非空的变量
if (!(isset($field_name) && strlen($field_name) > 0))
要我思维方式,下面简单得多的形式会做同样的事情:
if ($field_name)
我失去了一些subltety由此更复杂的形式是更精确?我倾向于在任何需要添加新代码的地方使用更简单的表单。
我保持一些旧的PHP代码,我发现代码中的一个测试很多地方的变量是非空的形式如下:简化测试非空的变量
if (!(isset($field_name) && strlen($field_name) > 0))
要我思维方式,下面简单得多的形式会做同样的事情:
if ($field_name)
我失去了一些subltety由此更复杂的形式是更精确?我倾向于在任何需要添加新代码的地方使用更简单的表单。
他们做不是做同样的事情。第一个代码示例:
$field_name
(我的数字!
是无意的,因为它不使感测它被写入的方式)$field_name
有一个字符串长度大于零第二代码示例:
true
值$field_name
,会抛出错误。第一个代码段是在其意图清楚和精确,并执行特定的任务。
第二个片段是非常基本的,只验证变量是否具有布尔真值(并且有更好的方法可以做到这一点)。如果$field_name
包含一个字符串“0”,这段代码将导致难以发现错误,因为它会失败,因为“0”的计算结果为false。第一个片段可以解决这个问题。
如果要是$字段为空($域)将会失败,0,0.00,虚假或任何可以铸造假
如果(!isset($场))
会失败,如果$现场并没有在所有
被宣布可以使用empty()
,以取代第一行:
if (!empty($field_name))
与你的第二个例子的问题是,它会产生,如果VA警告没有设置riable。 empty()
和isset()
都不会为不存在的变量生成警告。
需要注意的是,你总是必须考虑到可能的值,所以如果你的价值可以0
或'0'
,这将无法正常工作后$var = 0;
,empty($var)
将评估为true
。
你说得对,你发现的代码很奇怪。这或许应该是:
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
。
你应该在PHP中查看[值为false的列表](http://www.php.net//manual/en/language.types.boolean.php)。那些布尔值为false,整数0,浮点数0.0,空字符串,字符串“0”,零元素数组,空元素和由空标记创建的SimpleXML对象。 – Marty
我忽略了在我们的系统中指定0或其他的falsy值是非法的。所以我没有明确说明意图。我的感觉是答案中有价值,我可能会接受其中的一个作为“答案”。我相信上面的第一行,无论其精度如何,都过于复杂。部分原因是因为它是一个条件否定的复合条件。 –