php中的简化if-then-else性能/优化

php中的简化if-then-else性能/优化,php,zend-optimizer,shorthand-if,php-opcode,Php,Zend Optimizer,Shorthand If,Php Opcode,谈到PHP,我想问一下这两种语言在性能上是否有差异: $name=($IsBoy)?"George":"Mary"; vs 这两个结果会导致不同的操作码吗 如果是,在性能方面是否有理论上的差异?(当然,忽略这两个需要读取/编译/解释的时间) 如果是,那么像zend optimizer这样的优化器会利用这一点并自动进行任何重新安排吗 p、 如果你认为我的“完整的手写体”代码太复杂,请提供一个最基本的代码示例并回答 更新: 我希望这个问题非常清楚,但人们似乎没有领会其中的含义。这个问题是关于性

谈到PHP,我想问一下这两种语言在性能上是否有差异:

$name=($IsBoy)?"George":"Mary";
vs

  • 这两个结果会导致不同的操作码吗

  • 如果是,在性能方面是否有理论上的差异?(当然,忽略这两个需要读取/编译/解释的时间)

  • 如果是,那么像zend optimizer这样的优化器会利用这一点并自动进行任何重新安排吗

p、 如果你认为我的“完整的手写体”代码太复杂,请提供一个最基本的代码示例并回答

更新:

我希望这个问题非常清楚,但人们似乎没有领会其中的含义。这个问题是关于性能上的理论上的差异(…但是真实的和可测量的)(这就是为什么我在理论上应用了粗体和斜体)。请不要回答什么编程风格更具可读性,这太挑剔了,不必担心性能


p、 s.2:通过强调“理论”一词,我试图避免出现“别担心,它不值得麻烦,它只是纳秒”类型的答案。

正常的ifelse语句和三元运算符都有轻微的性能差异。您可以查看下面的stackoverflow链接以获取更多参考


我经常放弃if-then-else,因为:

$name = 'the expected';
if ([expr]) $name = 'the exception';

易于阅读,括号少且紧凑。

好的,这很有趣

我已经分别对您的两个示例进行了快速的调试

这是我得到的

当然,每次刷新都可能有不同的结果。请确保

第二种方法总是比第一种方法好

即使每次刷新时,您可能会发现第一种方法偶尔花费的时间更少 但这与PHP核心优化有关


关于Zend optimizer,我没有测试这一点,我不知道是否有任何确定性,但我的猜测是,两者之间没有真正的性能差异,如果有,这将是一个微优化,您不必担心。您可以检查这一点:Fabien的文章也与我自己的观察结果非常吻合;虽然很高兴看到关于这个问题的解释why@PédeLeão它是实用的,因为它在现实生活中有应用,并且完全可以负责。我问了1)关于生成的操作码(这不是抽象的东西)2)我问了性能的测量(真实的测量),3)我问了zend optimizer(这对你来说足够实用吗?)。如果你认为这个答案失败,你可以标记它。看在上帝的份上,我发布了代码。Zend Optimizer是关于以真实的方式改进代码,而不仅仅是理论上的。当你开始谈论纳秒级的性能结果时,你让我更加相信你的问题没有实际意义。这很好,我也这么做了,但这并不是我问题的答案。但是,这是性能较差的,因为你让引擎做的步数超过了必要的步数。我的意思是,你的方法将始终做到以下几点:1。设置变量。2.检查条件3。取消设置变量4。将新值和类型设置为变量。IF/ELSE条件将具有较少的步骤。1.检查状况,转到第2行。取消设置3。不要设定第四步。因此,在设置第一个变量时,您节省了一些处理。准确地说是25%。
$name = 'the expected';
if ([expr]) $name = 'the exception';