Support Explicit Backed Enum casting
未关闭
还没有人认领这个 Issue。
Category: Engine
Feature
Status: Requires RFC
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.1k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
Description
The following code:
<?php
echo '----- Backed integer enum -----'.PHP_EOL;
enum DayOfWeekInt : int
{
case Monday = 1;
case Tuesday = 2;
case Wednesday = 3;
case Thursday = 4;
case Friday = 5;
case Saturday = 6;
case Sunday = 7;
}
$var = DayOfWeekInt::Monday;
try {
echo '--- intval($var) --'.PHP_EOL;
echo intval($var);
} catch (\Throwable $ex) {
echo $ex;
}
echo PHP_EOL;
try {
echo '--- (int) $var ---'.PHP_EOL;
echo (int) $var;
} catch (\Throwable $ex) {
echo $ex;
}
echo PHP_EOL;
echo PHP_EOL;
echo '----- Backed string enum -----'.PHP_EOL;
enum DayofWeekString : string
{
case Monday = 'monday';
case Tuesday = 'tuesday';
case Wednesday = 'wednesday';
case Thursday = 'thursday';
case Friday = 'friday';
case Saturday = 'saturday';
case Sunday = 'sunday';
}
$var = DayofWeekString::Monday;
try {
echo '--- strval($var) ---'.PHP_EOL;
echo strval($var);
} catch (\Throwable $ex) {
echo $ex;
}
echo PHP_EOL;
try {
echo '--- (string) $var ---'.PHP_EOL;
echo (string) $var;
} catch (\Throwable $ex) {
echo $ex;
}
echo PHP_EOL;
Resulted in this output:
----- Backed integer enum -----
--- intval($var) --
Warning: Object of class DayOfWeekInt could not be converted to int in /in/pfXH4 on line 18
1
--- (int) $var ---
Warning: Object of class DayOfWeekInt could not be converted to int in /in/pfXH4 on line 26
1
----- Backed string enum -----
--- strval($var) ---
Error: Object of class DayofWeekString could not be converted to string in /in/pfXH4:48
Stack trace:
#0 {main}
--- (string) $var ---
Error: Object of class DayofWeekString could not be converted to string in /in/pfXH4:56
Stack trace:
#0 {main}
But I expected this output instead:
no warnings, no errors and a correct explicit conversion.
----- Backed integer enum -----
--- intval($var) --
1
--- (int) $var ---
1
----- Backed string enum -----
--- strval($var) ---
monday
--- (string) $var ---
monday
PHP Version
PHP 8.5.3
Operating System
No response
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先运行 issue 中提供的 PHP 8.5.3 复现,并比较对 backed enums 的显式 integer 和 string cast。在 PHP 源代码中追踪 enum 的 cast 行为,然后为预期值以及不产生 warnings 或 errors 添加覆盖。四种转换都产生报告中显示的 backed values 时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- php
- 领域
- backend
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100