Category
stdlib — php-src-strict enum alias resolution
Problem
class_alias('E', 'EAlias') registers the alias (closed #5765), but fetching a case through the alias (EAlias::A) returns the backing scalar (int(1)) instead of the enum case object. Zend returns enum(E::A) and EAlias::A === E::A is identity-true.
Compliance test/compliance/cases/stdlib/class_alias_enum.phpt currently fails alongside enum case TypeError guards.
php-src reference
Repro
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php -r '"'"'enum E:int{case A=1;} class_alias("E","EAlias"); var_dump(EAlias::A); var_dump(EAlias::A === E::A);'"'"''
Zend:
This compiler (bin/vm.php):
Full compliance:
php bin/vm.php test/compliance/cases/stdlib/class_alias_enum.phpt
Scope (PHP-in-PHP)
ext/standard/class_alias.php, ext/standard/VmClassAlias.php (if present)
lib/VM/Context.php — registerClassAlias for enums
lib/JIT/Builtin/Type/Object_.php — enum case fetch through aliased ClassEntry
ext/standard/JitClassAlias.php — JIT/AOT alias table must not scalarize enum cases
Done when (php-src-strict)
Related
#5765 (closed), #6583 (closed), #9152 (is_a on enums).
Category
stdlib— php-src-strict enum alias resolutionProblem
class_alias('E', 'EAlias')registers the alias (closed #5765), but fetching a case through the alias (EAlias::A) returns the backing scalar (int(1)) instead of the enum case object. Zend returnsenum(E::A)andEAlias::A === E::Ais identity-true.Compliance
test/compliance/cases/stdlib/class_alias_enum.phptcurrently fails alongside enum case TypeError guards.php-src reference
zend_register_class_alias_ex()/ enum class entriesRepro
Zend:
This compiler (
bin/vm.php):Full compliance:
Scope (PHP-in-PHP)
ext/standard/class_alias.php,ext/standard/VmClassAlias.php(if present)lib/VM/Context.php—registerClassAliasfor enumslib/JIT/Builtin/Type/Object_.php— enum case fetch through aliasedClassEntryext/standard/JitClassAlias.php— JIT/AOT alias table must not scalarize enum casesDone when (php-src-strict)
bool(true)for identity.class_alias_enum.phptandclass_alias_enum_jit.phptgreen.class_alias_enum_case_typeerror.phptstill TypeErrors on case-as-operand (closed Stdlib: class_alias() — enum case alias operand must TypeError not LogicException (basic_functions.c) #6583 behavior).Related
#5765 (closed), #6583 (closed), #9152 (is_a on enums).