PHP では、for ループは、コードの一部を繰り返し実行するために使用される一般的な反復構造です。ただし、場合によっては、条件付き for ループに return ステートメントを追加し忘れることがあり、その場合、プログラムが正常に結果を返せなくなります。この場合、PHP エディターの Yuzai は、予期しないエラーを避けるために適切な return ステートメントがループに追加されていることを確認するためにコードを適時にチェックすることをお勧めします。これにより、コードの信頼性と正確性が保証され、プログラムの効率と保守性が向上します。
次のコードを書くと、コンパイラが missing return states エラーを生成することに気付きました。
:
これは、次のコードがエラーなしでコンパイルされた場合です:
リーリー最初のコードは、メソッドが返らないということはあり得ないので、論理的および技術的には問題ありません。コンパイラがこのエラーを表示する理由はありますか?それとも、何らかの欠落したロジックまたはバグでしょうか?
@Cerise Limónのコメントを回答に拡張すると、「最初のコードは...技術的に問題ありません」という主張は誤りです。
とそしてこれ:
(強調は私が追加しました)
最初の関数のコードを調べると、仕様の次の条件が満たされていないことがわかります。
リーリー関数には結果パラメータ (int
戻り値) があるため、終了ステートメントで終了する必要がありますが、関数の最後のステートメントは for
ステートメント 条件 を伴う、つまり は、仕様で定義されている「終了ステートメント」ではありません。
これは奇妙に思えるかもしれませんが、実際には技術的には正しいです。
では、なぜ 2 番目の関数には問題がないのでしょうか?
リーリーこの例では、関数の最後のステートメントは for
です。ここで、 は無条件です。 および 、 は、関数の Break ステートメントを参照しません。 for ループ。これは終了文の言語仕様定義を満たします。
作品にはロジックがあります。
無条件の for
ステートメントに break
が含まれている場合、ループ が終了する可能性があるため、関数には return ステートメントが必要です。
for ステートメント
に break が含まれていない (そして return
ステートメントがない) 場合、ループは実行されません。終了 (少なくとも通常の実行パスの結果としてではなく) 関数の戻り値が必要です)。
また、
ステートメントが到達可能かどうかを判断するための制御フロー分析はなく、 ステートメントが存在する必要があるだけであることにも注意してください。たとえば、次のコードでは、
break に明らかにアクセスできない場合でも、「戻り値がありません」コンパイル エラーが発生します。
リーリー
以上が条件付き for ループに return ステートメントがありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。