Skip to content

Language: foreach(enum case) yields name/value props (#23433) - #23469

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-23433-enum-foreach-props
Jul 26, 2026
Merged

Language: foreach(enum case) yields name/value props (#23433)#23469
PurHur merged 1 commit into
masterfrom
agent/issue-23433-enum-foreach-props

Conversation

@PurHur

@PurHur PurHur commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Summary

Test plan

  • Issue repro (Zend + VM + JIT):
./script/docker-exec.sh -- bash -lc 'cat >/tmp/repro_enum_foreach.php <<'"'"'PHP'"'"'
<?php
enum E { case A; }
$ks = [];
foreach (E::A as $k => $v) { $ks[] = "$k=" . var_export($v, true); }
echo implode(",", $ks), "\n";
enum S: string { case A = "x"; }
$ks = [];
foreach (S::A as $k => $v) { $ks[] = "$k=" . var_export($v, true); }
echo implode(",", $ks), "\n";
PHP
php /tmp/repro_enum_foreach.php
php bin/vm.php /tmp/repro_enum_foreach.php
php bin/jit.php /tmp/repro_enum_foreach.php'

Output (all three):

name='A'
name='A',value='x'
  • vendor/bin/phpunit --filter foreach_enum_case_properties test/compliance/EnumVMTest.php → OK
  • Related: foreach_enum_case_*, foreach_object_property_visibility, get_object_vars_enum_case* → OK (16 tests)

Made with Cursor

Wire collectObjectVarsForBuiltin through EnumCaseSupport so object foreach
matches get_object_vars / zend_enum.c pseudo-properties.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit 970671d into master Jul 26, 2026
@PurHur
PurHur deleted the agent/issue-23433-enum-foreach-props branch July 26, 2026 15:40
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.

Language: foreach(enum case) omits name/value props — Zend yields name (+ value if backed) (Zend/zend_enum.c)

1 participant