我正在使用NetBeans for PHP 6.5.
在我的代码中,我经常使用以下类型的命令:
if (($row = $db->get_row($sql))) {
return $row->folder;
} else {
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
Netbeans告诉我,我不应该在IF语句中使用赋值.
为什么?
Too*_*the 51
它们并不坏,但它们可能导致危险的错误.
在类似语言中,赋值是表达式,(支持例如a = b = c = 1;)常见错误是:
if (a = 1) { .. }
Run Code Online (Sandbox Code Playgroud)
但是你想拥有
if (a == 1) { .. }
Run Code Online (Sandbox Code Playgroud)
一些开发人员已经学会打字
if (1 == a) { .. }
Run Code Online (Sandbox Code Playgroud)
如果忘记了'='则创建错误.但我认为它并没有提高可读性.
但是现代编译器,如果你写的话会发出警告
if (a = 1) { .. }
Run Code Online (Sandbox Code Playgroud)
我认为这是一个更好的解决方案.在这种情况下,你被迫检查它是否真的是你的意思.
它可能试图帮助您避免可怕的错别字:
Run Code Online (Sandbox Code Playgroud)if(a = b) //logic error
尽管我希望环境足够聪明以警告您,但也要足够聪明以达到“哦,不用担心这种情况”的条件。
有条件的人通常包括短路操作员。因此,给出以下示例:
if ( a=func(x) && b=func(y) )
{
// do this
}
Run Code Online (Sandbox Code Playgroud)
可能不会立即显而易见,但是只有在第一个返回时才会发生第二个赋值>0,并且如果您func(y)有其他预期的副作用,也不会发生。
简而言之,如果您知道自己在做什么并且了解了副作用,那么这没有什么错。但是,您必须考虑在您离开时其他人可能正在维护您的代码,而他们可能没有您那样有经验。
此外,将来的维护者可能会认为您打算执行以下操作:
if ( a==func(x) && b==func(y) ) ...
Run Code Online (Sandbox Code Playgroud)
如果他们“修复”了您的代码,他们实际上会破坏它。