PHP中的Switch或If语句更快,为什么

PHP中的Switch或If语句更快,为什么,php,Php,在至少有10-20个条件的情况下,switch或If语句是否可以快速执行 谢谢 Dave对其进行了基准测试,得出结论“if/else稍微好一点。”包括代码和基准测试 得出的结论是,它们大致相当。使用其中一种可能与使用另一种略有不同,但对于10-20种情况,我认为切换案例可能更具可读性,也更适合。我一直被教导,对于4或5种以上的情况,你应该几乎总是使用切换overif/else/else if结构,但我可能是错的 我怀疑Jordan提供的(第一个)链接,我认为适当使用switch时应该会稍微快一点

在至少有10-20个条件的情况下,switch或If语句是否可以快速执行

谢谢 Dave对其进行了基准测试,得出结论“if/else稍微好一点。”包括代码和基准测试


得出的结论是,它们大致相当。

使用其中一种可能与使用另一种略有不同,但对于10-20种情况,我认为切换案例可能更具可读性,也更适合。

我一直被教导,对于4或5种以上的情况,你应该几乎总是使用
切换
over
if
/
else
/
else if
结构,但我可能是错的

我怀疑Jordan提供的(第一个)链接,我认为适当使用
switch
时应该会稍微快一点,我没有硬数据来支持它,但您可以自己对它进行基准测试。例如,当您需要进行严格的(
==
)比较时,您就不应该使用
开关

无论如何,重点是这是一个微观优化,我更喜欢一个可读的,漂亮的(女孩风格的)代码,而不是一个丑陋的代码


对于10-20种情况,您肯定应该使用
开关
IMO.

如果不进一步了解问题的性质,我想您显然是在优化错误的东西

如果您在一个大数据集上循环,并根据一个特定数据字段的内容决定做不同的事情,那么条件的速度是唯一相关的情况

  • 如果您对每个数据集做了很多事情,那么条件的成本应该与每个循环迭代的速度无关,并且您肯定应该优化可读性并使用switch语句

  • 如果您在每次迭代中做的很少,但必须做一百万次,那么您应该以不同的方式进行:

    • 如果数据来自数据库,则使用SQL将大量转换卸载到源数据库
    • 按开关值对所有数据进行排序,然后分别处理每个子集
    • 为每个不同的数据点调用不同的函数可能会更快,如下所示:
  • 或者,它可能不会——但仍然会——告诉我们确切的情况,或者考虑优化其他东西,如果整个事情不是瓶颈的话
实际上,从同一个链接中“很奇怪,相同的脚本,在所有情况下都能更快地向我显示开关大小写”。正如其他人所指出的,除非您发现代码的这一部分已成为瓶颈,否则在这里优化可读性比优化性能更好。正如霍尔所说,“97%的时候,过早优化是万恶之源。”
 foreach($alldata as $index => $dataset) 
 { 
   $function_to_call = 'handle_'.$dataset->switching_value;
   if (function_exists($function_to_call))
      $function_to_call($dataset);
 }