【发布时间】:2011-11-09 14:12:22
【问题描述】:
我正在决定是否在我正在编写的 PHP 站点中使用 if/else 与 switch/case,我想知道使用其中一个或另一个是否有任何好处在某些情况下,打算使用一个而不是另一个。
【问题讨论】:
标签: php
我正在决定是否在我正在编写的 PHP 站点中使用 if/else 与 switch/case,我想知道使用其中一个或另一个是否有任何好处在某些情况下,打算使用一个而不是另一个。
【问题讨论】:
标签: php
有趣的问题,因为在编译语言(甚至是 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/
尤其是这篇文章,http://php100.wordpress.com/2009/06/26/php-performance-google/,很有趣,因为作者比较了 if 和 switch 的内部 php 代码,它们几乎相同。
无论如何,我会说任何性能提升都将是微不足道的,因此它更多的是用户偏好。 if 语句更灵活,您可以更轻松地捕获值范围(尤其是大范围)以及进行更复杂的比较,而 switch 语句恰好排列一个值。
【讨论】:
switch-case 语句只切换给定表达式的值。如果您有很多(我会说甚至不止两个)可能的操作来决定,这会非常方便。所以,如果你有一个变量的多个离散值,并且为每个值执行一些代码,那么 switch-case 语句可能会更好。
另一方面,如果您有一个比简单相等更复杂的测试,或者如果只涉及两种可能性,那么 if-else 可能会更好。
请注意,就实际行为而言,它们是相同的;这只是一个问题,对于您、程序员以及其他需要阅读或修改代码的人来说,哪个更方便。
【讨论】:
if-else 语句可以评估几乎所有类型的数据,例如整数、浮点、字符、指针或布尔值。 switch 语句可以计算整数或字符。在 'if-else' 语句的情况下,将根据条件执行 'if' 块或 'else' 块。
【讨论】: