You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中$foo = !!'foo'; echo $foo;为何输出1?双感叹号作用解析

为什么$foo = !!'foo'; echo $foo;输出'1'?

这个问题问得好!咱们一步步拆解这段PHP代码的执行逻辑,搞懂双感叹号的作用:

先看双感叹号的核心机制

!!其实是两次连续使用逻辑非运算符(!),本质是把任意类型的值快速转换成对应的布尔值:

  1. 第一次感叹号:将值转为布尔值并取反
    在PHP的类型规则里,非空字符串'foo'属于「真值」(只有空字符串''、字符串'0'才会被判定为假值)。所以!'foo'会先把'foo'转成布尔值true,再取反得到false。

  2. 第二次感叹号:再次取反,还原为原始布尔真值
    对第一步得到的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:38:19