LoginSignup
0
0

More than 3 years have passed since last update.

do-while(false) 私の場合

Posted at
do {
    //
    if ($error) {
        break;
    }
    //
} while (false);

【 参考URL 】
try~catch使うほどじゃないけどgotoは嫌だってときのための便利な書き方
do-while(false) を見つけたときの雑感
PHP マニュアル - do-while

(まず、このテクニックのネーミングが欲しいですが、
今回のみ仮称として「ダミーブロック」とします。)

ダミーブロックは私もよく使いますが、書き方が上記とは違います。

無限ループのリスク?

do-while(false) は、falsetrue と書き間違えると、
無限ループの可能性があります。
(0を1と書き間違えても同じ。)

また、最初は正しく書いていても、別の置換で
false → true と うっかり書き換わることも なくはないです。

夜 寝ているときに、
「ダミーブロックで true と書いちゃったかもしれない :fearful:
と不安になることも ありえます。

(考えすぎと言われれば それまでですが :sweat_smile:

別の記述法1

do-while(false) の替わりに、
私は しばらく下記を使っていました。

for ( $i = 0; $i <= 0; $i++ ) {
    //
}

for文なので、最初から1回のみループすることが確定しています。

ただ for ( $i = 0; $i <= 0; $i++ ) { の部分が
長いなぁとは思っていました。$i も3回も書かなきゃだし。

しかも $i のどれか1ヶ所を $ii とか $j に書き間違えたら、
これも無限ループになってしまいます。

なので、無限ループになりようがない
別の書き方を模索していました。

別の記述法2

最近 採用しているのが、以下の記述です。

foreach ( array(0) as $dummy ) {
    //
}

array(0) の要素数が1つなので、1回のみループします。
これは さすがに、間違っても無限ループにはならないと思います。
array(0) です。array() ではありません。

ただ as $dummy の部分が邪魔です。
$dummy は使わないから、これを消せれば完璧なのですが。
as 0 とか as null とか試しましたがダメでした。

ちなみに as array() とすると、
T_PAAMAYIM_NEKUDOTAYIM という見慣れないエラーが出ます。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0