我正在决定是否在我正在编写的PHP站点中使用if/else和switch/case,我想知道使用其中一个是否有任何好处,或者是否有一些特定的实例打算使用其中一个而不是另一个。
发布于 2011-09-03 11:30:07
这个问题很有趣,因为在编译语言(甚至是JIT语言)中,使用switch语句会有很好的性能提升,因为编译器可以构建跳转表,并且会在固定的时间内运行。甚至在字符串上的开关也可以优化,因为字符串可以被散列。然而,根据我所读到的,php似乎没有做这样的优化(我假设是因为它被解释并逐行运行)。
关于交换机优化的优秀.Net文章:If vs. Switch Speed
关于php被解释,PHP文档说:http://php.net/manual/en/control-structures.switch.php
为了避免错误,了解switch语句是如何执行的非常重要。switch语句逐行执行(实际上是逐条语句执行)。在开始时,不执行任何代码。只有当发现case语句的值与switch表达式的值匹配时,PHP才开始执行这些语句。PHP继续执行这些语句,直到switch块结束,或者第一次看到break语句。如果您不在case的语句列表的末尾编写break语句,PHP将继续执行以下case的语句。
我还发现了一些参考资料,它们都表明php中的if / else语句实际上可能比switch语句更快(奇怪)。如果你编译php,这可能不是真的(这是我从未做过的事情,但显然这是可能的)。
http://www.fluffycat.com/PHP-Design-Patterns/PHP-Performance-Tuning-if-VS-switch/
这篇文章特别有趣,因为作者比较了if和switch的内部http://php100.wordpress.com/2009/06/26/php-performance-google/代码,它们几乎是相同的。
无论如何,我想说任何性能上的提升都是微不足道的,所以这更多的是用户的偏好。If语句更灵活,您可以更容易地捕获值的范围(特别是大范围),以及进行更复杂的比较,而switch语句只有一个值。
发布于 2011-09-03 11:08:30
switch-case语句仅在给定表达式的值上进行切换。如果您有许多(我想说甚至超过两个)可能的操作可供选择,这将变得非常方便。因此,如果您有一个变量的多个离散值以及要对其中每个值执行的一些代码,那么switch-case语句可能更好。
另一方面,如果您有一个比简单相等更复杂的测试,或者如果只涉及两种可能性,if-else可能更好。
请注意,就实际行为而言,它们是相同的;问题只是对于您、程序员和其他必须阅读或修改代码的人来说,哪一个更方便。
发布于 2021-04-21 22:44:37
if-else语句可以计算几乎所有类型的数据,如整数、浮点、字符、指针或布尔值。switch语句可以计算整数或字符。在使用'if-else‘语句的情况下,'if’块或'else‘块将根据条件执行。
https://stackoverflow.com/questions/7290889
复制相似问题