PHP是否会优化恒真/恒假代码块?还是每次执行判断逻辑?
PHP会优化恒真/恒假的判断语句吗?
先纠正下示例代码里的错误:PHP中用const定义常量不能加$前缀,正确写法应该是const ENABLE_FEATURE = true;,避免语法错误。
针对你提到的两种场景,分情况说明,且确实存在PHP版本差异:
一、字面量直接判断(比如if(1==1))
这种完全由字面量构成的恒真/恒假条件,PHP会直接优化:
- 不管开没开OPcache(PHP 5.5起默认集成的字节码缓存工具),解释器都能快速识别这类简单判断,不会执行多余的判断逻辑;
- 开启OPcache后,编译阶段就会直接处理:恒真的话把
if块代码直接提取出来执行,恒假的话直接删掉整个if块,连判断步骤都不会留。
二、常量判断(比如引入的ENABLE_FEATURE)
这里的优化程度和PHP版本有关:
- PHP 7.0及以上:用
const或define()定义的全局常量,编译器在编译阶段就能确定其值,会和字面量判断一样被彻底优化,不会在每次执行时做判断。 - PHP 5.x版本:如果常量是通过
include/require引入的,主文件编译时还没加载常量定义,会在执行阶段做一次判断,但这个判断逻辑极快,基本不会有性能损耗。
注意:如果是动态修改的“伪常量”(比如违规用define()重复定义修改值),那判断会每次执行,但正常定义的常量是不可变的,所以必然会被优化。
内容的提问来源于stack exchange,提问作者Bigbob556677
相关产品推荐
相关产品推荐

