PHP中的Switch-Case和If-Else有什么区别?

时间:2011-09-03 03:03:10

标签: php

我正在决定是否在我正在撰写的PHP网站中使用if / else vs switch / case,我想知道是否有任何好处使用一个或另一个,或者是否存在某个意图使用一个而不是另一个的情况。

3 个答案:

答案 0 :(得分:24)

有趣的问题是因为在编译语言(或甚至是JIT的语言)中,使用switch语句会有很好的性能提升,因为编译器可以构建跳转表并在恒定时间内运行。甚至可以优化对字符串的切换,因为可以对字符串进行哈希处理。但是,根据我的阅读,似乎php没有进行这样的优化(我假设是因为它被解释并逐行运行)。

关于交换机优化的伟大.Net文章:If vs. Switch Speed

关于php的解释,PHP文档说:http://php.net/manual/en/control-structures.switch.php

  

了解如何执行switch语句非常重要   为了避免错误。 switch语句逐行执行   (实际上,声明中的声明)。一开始,没有代码   执行。仅当找到具有值的case语句时   匹配PHP表开始执行的switch表达式的值   声明。 PHP继续执行语句直到结束   切换块,或第一次看到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 :(得分:4)

switch-case语句仅切换给定表达式的值。如果您有很多(我甚至可以说是两个以上)可能的行动来决定,这将变得非常方便。因此,如果您有一些变量的离散值和一些要为这些值中的每一个执行的代码,那么switch-case语句可能更好。

另一方面,如果你有一个比简单相等更复杂的测试,或者只涉及两种可能性,那么if-else可能会更好。

请注意,就实际行为而言,它们是相同的;这只是一个问题,对你,程序员以及其他人必须阅读或修改代码更方便。

答案 2 :(得分:0)

if-else 语句可以计算几乎所有类型的数据,例如整数、浮点数、字符、指针或布尔值。 switch 语句可以计算整数或字符。在'if-else'语句的情况下,将根据条件执行'if'块或'else'块。