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
相关产品推荐
相关产品推荐

