Я недавно начал использовать 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++;
}
, который никогда не завершится, потому что 1 присваивается $ a, который, в свою очередь, возвращает 1 для оператора while, а не проверяется на $ a и возвращает false для оператора while, когда $ a не равно 1.
Легко сделать ошибку, которая может проверять предупреждение, предоставленное, но забывает добавить дополнительный $ f = fetch ($ q) в конце блока while во втором примере, что также приведет к циклу, который никогда не закончится. Если я изменю свой код, чтобы удалить предупреждение, а затем забуду добавить $ f = fetch ($ q) в конце блока while, Zend не будет предупреждать об этом!
Итак, удаляя предупреждение о распространенной ошибке, я настраиваю себя на другую распространенную ошибку.
Из кастрюли в огонь.