Zend Studio报告警告:条件分配.这真糟糕吗?

Sta*_*rds 9 warnings zend-framework variable-assignment while-loop conditional-statements

我最近开始使用Zend Studio,它报告了以下类型的代码:

$q = query("select * from some_table where some_condition");
while ($f = fetch($q)) {
  // some inner workings
}
Run Code Online (Sandbox Code Playgroud)

要停止警告,代码需要像这样写:

$q = query("select * from some_table where some_condition");
$f = fetch($q);
while ($f) {
  // some inner workings
  $f = fetch($q);
}
Run Code Online (Sandbox Code Playgroud)

为什么这被标记为警告?这么糟糕吗?

我知道警告可能旨在阻止这样的错误:

$a = 1;
while ($a = 1) {
  // some inner workings
  $a++;
}
Run Code Online (Sandbox Code Playgroud)

永远不会终止,因为1被分配给$ a,而$ a又返回1到while语句,而不是针对$ a进行测试,并且当$ a不是1时,将false返回到while语句.

容易出错的错误可以验证警告,但是在第二个例子中忘记在while块的末尾添加额外的$ f = fetch($ q),这也会导致永远不会终止的循环.如果我更改我的代码以删除警告,然后忘记在while块的末尾添加$ f = fetch($ q),Zend将不会发出警告!

因此,通过删除有关常见错误的警告,我正在为自己设置一个不同的常见错误.

走出锅,进入火中.

小智 30

while (($row = $sql->db_Fetch("MYSQL_ASSOC")) != false)
Run Code Online (Sandbox Code Playgroud)


win*_*ace 8

因此,如果没有正当理由,您将无需重写所有代码:您可以在Window |中禁用对此潜在编程错误的检测 首选项,PHP | 语义分析.


Jes*_*sak 6

这可能被标记为警告,因为人们在表示"=="时经常误用"=".

例如:

$a = 1
while($a = 1) {
   $a++;
}
Run Code Online (Sandbox Code Playgroud)

这永远不会终止,但如果你认为你写的是"==",那就应该.

  • 检测此类错误的一种方法是反转语句:`1 == $ a`.PHP将抛出错误,因为左侧部分不可分配. (2认同)