>そもそも$iを内側に閉じ込める必要性がない
>$iを初期化しつつループ数を保持する変数として使いたいならfor文
こんなのはわかって聞いてるんですよ。
速度云々じゃなくてどちらかというと可読性の問題ですね。
例えば、

$i = 0;
ここらへんで100行ほどコードを書いて、唐突に
while ($i < 30)

こういうことも可能なので。