Недавно я начал использовать Zend Studio, который сообщил как предупреждение о следующем типе кода:
$q = query("select * from some_table where some_condition");
while ($f = fetch($q)) {
// some inner workings
}
Чтобы остановить предупреждение, код должен быть написан следующим образом:
$q = query("select * from some_table where some_condition");
$f = fetch($q);
while ($f) {
// some inner workings
$f = fetch($q);
}
Почему это помечено как предупреждение? Это так плохо?
Я понимаю, что предупреждение может быть предназначено для предотвращения таких ошибок:
$a = 1;
while ($a = 1) {
// some inner workings
$a++;
}
который никогда не завершится, потому что $a присваивается 1, что, в свою очередь, возвращает 1 оператору while, а не проверяется на $a и возвращает false оператору while, когда $a не равен 1.
Простая ошибка, которая может подтвердить предупреждение, разрешено, но так же забывают добавить дополнительную $f = fetch($q) в конце блока while во втором примере, что также приведет к циклу, который никогда не завершится. . Если я изменю свой код, чтобы удалить предупреждение, а затем забуду добавить $f = fetch($q) в конце блока while, Zend не будет предупреждать об этом!
Таким образом, удаляя предупреждение о распространенной ошибке, я настраиваю себя на другую распространенную ошибку.
Из кастрюли, в огонь.