Skip to content

Fix class_implements() on enum case objects (#5651) - #7312

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-5651-class-implements-enum-case
Jun 7, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-5651-class-implements-enum-case

Conversation

@PurHur

@PurHur PurHur commented Jun 7, 2026

Copy link
Copy Markdown
Owner

Summary

Closes #5651

php-src reference

  • ext/standard/basic_functions.c — PHP_FUNCTION(class_implements), object branch
  • Zend/zend_enum.c — enum case objects implement UnitEnum / BackedEnum

Verification

Issue repro (Zend vs VM):

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "enum E:int{case A=1;} var_dump(class_implements(E::A));"
php bin/vm.php -r "enum E:int{case A=1;} var_dump(class_implements(E::A));"
'

Both emit array(2) { ["UnitEnum"]=>... ["BackedEnum"]=>... }.

Compliance + unit tests:

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
vendor/bin/phpunit --filter class_implements_enum
vendor/bin/phpunit --filter ClassImplementsBuiltinTest
'

Output:

OK (1 test, 1 assertion)
OK (5 tests, 5 assertions)

Test plan

  • Issue repro green on VM
  • class_implements_enum_case_object.phpt compliance case
  • ClassImplementsBuiltinTest::testVmClassImplementsOnEnumCaseObject

Made with Cursor

Resolve enum case operands to the declaring enum ClassEntry and map
implicit unitenum/backedenum interfaces to UnitEnum/BackedEnum display
names so class_implements(E::A) matches Zend and E::class.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit 320dcd4 into master Jun 7, 2026
@PurHur
PurHur deleted the agent/issue-5651-class-implements-enum-case branch June 7, 2026 04:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Stdlib: class_implements() on enum case object — must return UnitEnum/BackedEnum (ext/standard/basic_functions.c)

1 participant