Support Explicit Backed Enum casting
オープン
まだ誰も着手していません。
Category: Engine
Feature
Status: Requires RFC
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.1k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、issue で提供されている PHP 8.5.3 の再現コードを実行し、backed enums に対する明示的な integer キャストと string キャストを比較します。PHP ソース内で enum のキャスト動作を追跡し、その後、期待される値と warnings または errors が発生しないことをカバーするテストを追加します。4 つすべての変換で、レポートに示されている backed values が生成されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100