PHP 7.4中两种整型转布尔的方式是否合理?
PHP 7.4 环境下两种整型转布尔实现的合理性评估
当前使用PHP 7.4版本的开发者,需要判断两种常见的整型转布尔实现方式是否属于合理的日常开发选择:
实现方式1:两次取反完成转换
对应代码示例:
$x = 123; $bool = !!($x);
合理性判断
- 该写法是PHP社区长期形成的通用编码约定,完全兼容PHP 7.4的语法规则,不存在版本适配问题
- 执行过程没有额外函数调用开销,性能表现和内置强制类型转换
(bool)$x基本一致,开发者自认为“可能并非最优实现”的判断存在偏差 - 对熟悉PHP语法的开发者来说可读性没有障碍;唯一的小缺点是对刚接触PHP的新手友好度稍低,需要一定的语法认知才能快速理解两次取反的作用
- 整体属于完全合理的开发选择,没有需要规避的硬伤
实现方式2:借助布尔类型形参的自动转换
对应代码示例:
function abc(bool $required = true) { var_dump($required); } abc(-123); // 输出 bool(true) abc(0); // 输出 bool(false) abc(123); // 输出 bool(true)
这里的转换规则完全符合PHP核心定义:所有非零整数(含负整数)转换为true,整数0转换为false,和手动强制转布尔的规则完全一致。
合理性判断
- 该写法仅在“本身就需要将转换后的布尔值传入对应函数执行后续逻辑”的场景下是合理选择:此时利用PHP默认的强制类型声明规则自动完成转换,没有多余的代码冗余
- 注意不能为了单纯把整型转为布尔值,专门定义一个只做类型承接的函数来完成转换——这类场景下的写法属于无意义的绕路,会引入不必要的函数调用开销,完全不符合精简开发的原则
- 开发时需要明确:PHP 7.4默认的标量类型声明是强制转换模式,传入非布尔类型的实参不会抛出类型错误,只有开启严格类型模式后才会对不匹配的传参抛出异常,这一行为差异需要在开发时格外留意,避免出现预期外的逻辑问题
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

