Category
stdlib
Problem
class_implements() on an enum must return the built-in interfaces UnitEnum and (for backed enums) BackedEnum, like Zend. This compiler returns an empty array.
php-src reference
ext/standard/basic_functions.c — PHP_FUNCTION(class_implements)
Zend/zend_enum.c — enum implements UnitEnum / BackedEnum
Repro
test/compliance/cases/stdlib/class_implements_enum_repro.php:
<?php
enum E: int { case A = 1; }
var_dump(class_implements(E::class));
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && cd /compiler && php bin/vm.php test/compliance/cases/stdlib/class_implements_enum_repro.php'
| Runtime |
Today |
| Zend |
array(2) { ["UnitEnum"]=> string(8) "UnitEnum" ["BackedEnum"]=> string(10) "BackedEnum" } |
| VM |
array(0) { } |
Scope (this repo)
| Area |
Path |
| Builtin |
ext/standard/class_implements.php / VmClassIntrospection |
| Enum metadata |
lib/VM/EnumSupport.php or class registry — record implemented interfaces at compile time |
Done when
- Repro
var_dump matches Zend for unit and backed enums.
class_implements(E::class, false) autoload flag behavior matches php-src (document if deferred).
Related
Category
stdlibProblem
class_implements()on an enum must return the built-in interfacesUnitEnumand (for backed enums)BackedEnum, like Zend. This compiler returns an empty array.php-src reference
ext/standard/basic_functions.c—PHP_FUNCTION(class_implements)Zend/zend_enum.c— enum implementsUnitEnum/BackedEnumRepro
test/compliance/cases/stdlib/class_implements_enum_repro.php:./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && cd /compiler && php bin/vm.php test/compliance/cases/stdlib/class_implements_enum_repro.php'array(2) { ["UnitEnum"]=> string(8) "UnitEnum" ["BackedEnum"]=> string(10) "BackedEnum" }array(0) { }Scope (this repo)
ext/standard/class_implements.php/VmClassIntrospectionlib/VM/EnumSupport.phpor class registry — record implemented interfaces at compile timeDone when
var_dumpmatches Zend for unit and backed enums.class_implements(E::class, false)autoload flag behavior matches php-src (document if deferred).Related