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

PHP枚举显式强制转换为int返回1并触发警告的原因咨询

为什么PHP枚举实例强制转换为int时返回1而非0?

先看你的测试代码:

enum DigitEnum : int
{
    case TWO = 2;
}

$i = (int) DigitEnum::TWO; // 触发警告
echo $i; // 输出1

这个结果的核心原因是PHP中对象强制转换为整数的默认行为:

  • 当你尝试将一个未实现__toString()方法(或__toString()返回的字符串无法解析为有效数字)的对象强制转换为int时,PHP会返回1,同时触发"Object of class X could not be converted to int"的警告。
  • 枚举实例本质上是对象,即便你定义了int类型的枚举,PHP也不会自动将枚举实例直接转换为其底层的int值——要获取枚举的底层值,你需要显式访问->value属性,比如DigitEnum::TWO->value才会得到2。

你提到“失败的转换通常返回0”,那是针对非对象类型的转换规则(比如将非数字字符串转int会返回0),但对象转int的规则完全不同:

// 普通对象转int的例子,同样返回1并触发警告
class Foo {}
$foo = new Foo();
echo (int)$foo; // 输出1

所以你的代码中,(int) DigitEnum::TWO本质是把枚举对象当作普通对象处理,遵循对象转int的默认逻辑,因此返回1。

内容的提问来源于stack exchange,提问作者Adam Cameron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:01:10