在PHP(C)这类编程中,赋值运算“=”和比较运算“==”是完全不同的,错误的使用可能造成不可预料的后果。笔者就因为错误的使用导致了死循环。

  笔者错误的代码如下:

[php]PGJyIC8+Lyrov5nph4zmmK/plJnor6/nmoTku6PnoIEqLzxiciAvPmZvcigkaT0xLCRpJmx0Oz04LCRpKyspezxiciAvPiZuYnNwOyZuYnNwOyZuYnNwOyBpZigkaT00KWVjaG8mcXVvdDsmbHQ7c3Ryb25nJmd0OyZxdW90Ozs8YnIgLz4mbmJzcDsmbmJzcDsmbmJzcDsgZWNobyAmcXVvdDskaSZxdW90Ozs8YnIgLz4mbmJzcDsmbmJzcDsmbmJzcDsgaWYoJGk9NCllY2hvJnF1b3Q7Jmx0Oy9zdHJvbmcmZ3Q7JnF1b3Q7OzxiciAvPn08YnIgLz4=[/php]

  这一段代码是笔者简化后的,基本上能够描述错误情况了。上面这段程序的设计目的,就是通过for循环依次输出数字1~8,在输出数字4的时候加粗表示。执行的结果却是程序一直输出加粗的4;

  正确的代码应该是这样的:

[php]PGJyIC8+Lyrov5nmmK/mraPnoa7nmoTku6PnoIEqLzxiciAvPmZvcigkaT0xLCRpJmx0Oz04LCRpKyspezxiciAvPiZuYnNwOyZuYnNwOyZuYnNwOyBpZigkaT09NCllY2hvJnF1b3Q7Jmx0O3N0cm9uZyZndDsmcXVvdDs7PGJyIC8+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGVjaG8gJnF1b3Q7JGkmcXVvdDs7PGJyIC8+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmKCRpPT00KWVjaG8mcXVvdDsmbHQ7L3N0cm9uZyZndDsmcXVvdDs7PGJyIC8+fTxiciAvPg==[/php]

  显然,错误的代码中,第2行本来是要判断$的值是否为4,如果是则输出加粗的代码。但是由于将判断运算符“==”错误的写为赋值运算符“=”,导致程序每次进入循环,$i就被重新赋值为4,然后执行循环内语句,接着自增后再次进入循环,然后重新再次赋值为4……如此反复,便形成了死循环。

  其他很多这类情况,出现的结果都是不可预料的。可能是想上例中出现死循环,还可以追踪查找出原因肯定在循环段内,如果没有明显的现象,估计要追踪错误就很难了。因此再次提醒大家,千万搞懂赋值运算符“=”和比较运算符“==”。

  另外,有一点需要说明的是。if、if……else……、swich……case这一类判断分支结构,在条件判断之后执行对应代码,然后就退出判断语句(有特殊代码除外);for、while这类循环结构,条件判断执行后会再次回到条件判断这一步,判断是否再次执行循环;由此可见分支和循环的差异了。