<?php
enum E: int { case A = 1; }
enum U { case X; }
var_export(is_subclass_of(E::A, BackedEnum::class));
var_export(is_subclass_of(E::A, UnitEnum::class));
var_export(is_subclass_of(U::X, UnitEnum::class));
var_export(is_subclass_of(U::X, BackedEnum::class));
Category
stdlibSummary
is_subclass_of()on enum case objects must recognize the built-inUnitEnum/BackedEnuminterfaces, matching Zend. Today the VM returnsfalsefor both backed and unit cases vs interface names.Related: #5422 (
class_implements()parity) — sameinstanceof_interfacepath in php-src; fix may sharelib/VM/enum case + interface checks.php-src reference
ext/standard/basic_functions.c—PHP_FUNCTION(is_subclass_of)→zend_is_a()Zend/zend_API.c— enum caseinstanceofagainstUnitEnum/BackedEnumRepro (today)
test/compliance/cases/stdlib/is_subclass_of_enum_case.phpt./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php test/compliance/cases/stdlib/is_subclass_of_enum_case.phpt'is_subclass_of(E::A, BackedEnum::class)truefalseis_subclass_of(E::A, UnitEnum::class)truefalseis_subclass_of(U::X, UnitEnum::class)truefalseis_subclass_of(U::X, BackedEnum::class)falsefalseScope (PHP-in-PHP)
ext/standard/is_subclass_of.php+ VM builtin — enum case interface tableis_a()/instanceof(Stdlib: is_subclass_of() on enum cases — UnitEnum/BackedEnum must be true (ext/standard/class.c) #5642, Stdlib: class_implements() on enum case object — must return UnitEnum/BackedEnum (ext/standard/basic_functions.c) #5651)runtime/*.clogicDone when
is_subclass_of(E::A, 'BackedEnum')string form works (not only::class)is_subclass_of_enum_case.phptVerification
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter is_subclass_of_enum_case'Links
class_implements()on enum type · Stdlib: class_implements() on enum case object — must return UnitEnum/BackedEnum (ext/standard/basic_functions.c) #5651 on enum case object · Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492