php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81438 Enums cannot be used before they are defined
Submitted: 2021-09-14 20:35 UTC Modified: 2021-09-15 08:01 UTC
From: julien dot boudry at gmail dot com Assigned:
Status: Wont fix Package: Class/Object related
PHP Version: 8.1.0RC1 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: julien dot boudry at gmail dot com
New email:
PHP Version: OS:

 

 [2021-09-14 20:35 UTC] julien dot boudry at gmail dot com
Description:
------------
This seems to be an inconsistency. The RFC does not say anything about this.

The opposite of what happens to a class.
Working if testEnum is declared before reflection.

Test script:
---------------
<?php

    $objClass = testObject::class; // OK
    $enumClass = testEnum::class; // OK

    new \ReflectionClass(testObject::class); // OK
    new \ReflectionEnum(testEnum::class); // Fatal Error

    //

    class testObject {}

    Enum testEnum {
        case TEXT;
    }



Expected result:
----------------
No error

Actual result:
--------------
PHP Fatal error:  Uncaught ReflectionException: Class "testEnum" does not exist in test.php:7
Stack trace:
#0 test.php(7): ReflectionEnum->__construct()
#1 {main}
  thrown in test.php on line 7

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-09-14 20:36 UTC] julien dot boudry at gmail dot com
-Summary: ReflectionEnum: Impossible to instantiate in the same way as Classas Class +Summary: ReflectionEnum: Impossible to instantiate in the same way as Class
 [2021-09-14 20:36 UTC] julien dot boudry at gmail dot com
fix title
 [2021-09-14 22:21 UTC] requinix@php.net
-Summary: ReflectionEnum: Impossible to instantiate in the same way as Class +Summary: Enums cannot be used before they are defined -Package: *General Issues +Package: Class/Object related
 [2021-09-14 22:21 UTC] requinix@php.net
ReflectionEnum is fine.
https://3v4l.org/KoUig/rfc#vgit.master

> Working if testEnum is declared before reflection.
Indeed, it looks like enum declarations aren't hoisted as classes are.
https://3v4l.org/ttQL2/rfc#vgit.master
 [2021-09-15 08:01 UTC] nikic@php.net
-Status: Open +Status: Wont fix
 [2021-09-15 08:01 UTC] nikic@php.net
Early binding is not supported for classes that implement interfaces.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 16 13:01:30 2024 UTC