PHP中$foo = !!'foo'; echo $foo;为何输出1?双感叹号作用解析
为什么
$foo = !!'foo'; echo $foo;输出'1'? 这个问题问得好!咱们一步步拆解这段PHP代码的执行逻辑,搞懂双感叹号的作用:
先看双感叹号的核心机制
!!其实是两次连续使用逻辑非运算符(!),本质是把任意类型的值快速转换成对应的布尔值:
第一次感叹号:将值转为布尔值并取反
在PHP的类型规则里,非空字符串'foo'属于「真值」(只有空字符串''、字符串'0'才会被判定为假值)。所以!'foo'会先把'foo'转成布尔值true,再取反得到false。第二次感叹号:再次取反,还原为原始布尔真值
对第一步得到的false再次取反,!false就会得到true。换句话说,
!!'foo'和(bool)'foo'、boolval('foo')的效果完全一致,都是把字符串'foo'转换成布尔值true,只是写法更简洁。
为什么echo输出的是'1'而非'true'?
当你用echo输出布尔值时,PHP会自动进行类型转换:
- 布尔值
true会被转换成字符串'1' - 布尔值
false会被转换成空字符串''
所以当echo $foo执行时,存储在$foo里的布尔值true就被转成了'1'输出。
双感叹号的常见使用场景
这种写法在PHP里很常见,用来快速判断一个值的“真假性”并得到标准布尔值,比如:
!!0→ 结果为false(0是假值)!![]→ 结果为false(空数组是假值)!!['apple']→ 结果为true(非空数组是真值)
内容的提问来源于stack exchange,提问作者Rodricck Curvelo
相关产品推荐
相关产品推荐

