我是靠谱客的博主 开心高山,最近开发中收集的这篇文章主要介绍php里面写for循环语句吗,for循环-PHP中while(true)和for(;;)之间有什么区别?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

好的,首先让我这样说:使用for(;;),因为它具有最大的语义含义。 您需要解析for(;;),因为这不是您经常看到的内容。

这么说,让我们分析一下:

操作码

代码

while(true) {

break;

}

echo "hi!";

编译为操作码:

0: JMPZ(true, 3)

1: BRK(1, 3)

2: JMP(0)

3: ECHO("hi!")

因此,基本上,它会检查“ true”,如果不是,则跳转到第四个操作码(即回显操作码)。 然后它中断了(这实际上只是对第4个操作码的静态跳转)。 那么循环的结尾将是无条件跳回到原始检查

比较一下:

for (;;) {

break;

}

echo "hi!";

编译为:

0: JMPZNZ(true, 2, 4)

1: JMP(0)

2: BRK(1, 4)

3: JMP(1)

4: ECHO("hi!")

因此,我们可以立即看到for(;;)版本中还有一个额外的操作码。

操作码定义

JMPZ(条件,位置)

如果条件为for(;;),则该操作码会跳转。如果条件为===,则该操作码只会执行一个操作码而不会执行任何操作。

JMPZNZ(条件,pos1,pos2)

如果条件为真,则此操作码跳至for(;;),如果条件为假,则跳至===。

JMP(位置)

该操作码总是跳到指定位置的操作码。

BRK(级别,位置)

这会将for(;;)的级别打破为===的操作码

回声(字符串)

输出字符串

他们是一样的吗

好了,看一下操作码,很明显它们是不相同的。 它们是for(;;),但不是===。while(true)循环会先执行条件跳转,然后执行代码,再执行无条件跳转。 for(;;)循环执行条件跳转,然后执行代码,然后执行无条件跳转,然后执行另一个无条件跳转。 因此,它会产生额外的跳跃。

操作缓存

在5.5中,opcache的Optimizer部分将优化静态条件跳转。

因此,这意味着for(;;)代码将优化为:

0: BRK(1, 2)

1: JMP(0)

2: ECHO("hi!")

for(;;)循环变为:

0: BRK(1, 2)

1: JMP(0)

2: ECHO("hi!")

这是因为优化器将找到并优化跳链。 因此,如果您使用5.5的内置opcache,它们将是相同的...

警告

这是一个完整而完全的微优化,可作为决策的基础。 使用可读的。 不要基于性能使用一个。 区别在那里,但微不足道。

最后

以上就是开心高山为你收集整理的php里面写for循环语句吗,for循环-PHP中while(true)和for(;;)之间有什么区别?的全部内容,希望文章能够帮你解决php里面写for循环语句吗,for循环-PHP中while(true)和for(;;)之间有什么区别?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部