php / php/php-src

Support Explicit Backed Enum casting

Offen
#22,288 7 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Category: Engine Feature Status: Requires RFC
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

https://3v4l.org/pfXH4#v8.5.3

<?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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie, indem Sie die bereitgestellte PHP-8.5.3-Reproduktion aus dem Issue ausführen und explizite Integer- und String-Casts für backed enums vergleichen. Verfolgen Sie das Casting-Verhalten von Enums im PHP-Quellcode nach und fügen Sie anschließend Tests für die erwarteten Werte sowie für das Ausbleiben von Warnungen oder Fehlern hinzu. Fertig ist die Aufgabe, wenn alle vier Konvertierungen die im Bericht gezeigten backed values erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.