/ / PHPのSwitch-CaseとIf-Elseの違いは何ですか? -php

PHPのSwitch-CaseとIf-Elseの違いは何ですか? - PHP

使用するかどうかを決定します if/elseswitch/case 私が書いているPHPサイトで、どちらかを使用する利点があるかどうか、または一方が他方ではなく使用されることを意図した特定のインスタンスがあるかどうか疑問に思っていました。

回答:

回答№1の22

興味深い質問言語(またはJIT」言語でも)switchステートメントを使用すると、コンパイラーがジャンプテーブルを作成でき、一定の時間で実行されるため、パフォーマンスが向上します。私が読んだことから、phpはそのような最適化を行わないようです(私はそれが解釈され、行ごとに実行されるため、私は仮定しています)。

スイッチの最適化に関する.Netの素晴らしい記事: スイッチ速度の場合

PHPの解釈については、PHPのドキュメントに次のように記載されています。 http://php.net/manual/en/control-structures.switch.php

スイッチの仕組みを理解することが重要ですステートメントはで実行されます 間違いを避けるため。 switchステートメントは行ごとに実行します (実際には、ステートメントごと)。最初は、コードはありません 実行されました。次の値を持つcaseステートメントが見つかった場合のみ switch式の値と一致し、PHPは実行を開始します ステートメント。 PHPは最後までステートメントを実行し続けます switchブロックの、または最初にbreakステートメントを検出したとき。もし 「caseの最後にbreakステートメントを記述しない」ステートメント リストの場合、PHPは次のケースのステートメントを実行します。

また、いくつかの参考文献がすべて示唆していますphpのif / elseステートメントは、実際にはswitchステートメントよりも速いかもしれません(奇妙な)。これはおそらく、PHPをコンパイルする場合には当てはまりません(私が「やったことのないことですが、明らかにそれは可能です」)。

http://www.fluffycat.com/PHP-Design-Patterns/PHP-Performance-Tuning-if-VS-switch/

特にこの記事、 http://php100.wordpress.com/2009/06/26/php-performance-google/作者はif vs switchの内部phpコードを比較し、それらはほぼ同一なので興味深いです。

とにかく、パフォーマンスの向上はステートメントがより柔軟で、値の範囲(特に大きな範囲)をより簡単にキャプチャでき、switchステートメントが並んでいるのに、より複雑な比較を行うことができる場合正確に1つの値に。


回答№2については4

switch-caseステートメントは、次の値をオンにします指定された式のみ。これは、多くの(2つ以上も言うことができる)アクションを決定できる場合に非常に便利です。 、switch-caseステートメントの方がおそらく優れています。

一方、単純な等式よりも複雑なテストがある場合、または2つの可能性しか含まれていない場合、if-elseの方がおそらく良いでしょう。

実際の振る舞いの点では、それらは「同一である」ことに注意してください。それは、あなた、プログラマー、そしてコードを読んだり修正したりする他の人にとってより便利な質問です。