Claro que, si cambiamos la primera instrucción por $i = 0 el bucle se ejecutará al menos una vez, pues la condición se evalúa al final, y dará la salida (errónea):