<?php
declare(strict_types=1);
enum E: int { case A = 1; }
enum U { case X; }
$o = (object) E::A;
var_export($o === E::A);
echo "\n";
var_export($o instanceof E);
echo "\n";
var_export($o);
echo "\n";
$ux = U::X;
$o2 = (object) $ux;
var_export($o2 === U::X);
echo "\n";
var_export($o2 instanceof U);
echo "\n";
Category
language· php-src-strict · regressionProblem
Closed #9569 fixed
(object)cast on enum cases, but VM regressed:(object) E::Ayields an emptystdClass($o === E::Afalse,$o instanceof Efalse) instead of returning the same enum case object unchanged (Zend parity).Compliance guard
test/compliance/cases/language/enum_object_cast.phptis red (verified 2026-06-19).php-src reference
Zend/zend_operators.c—cast_object/ enumIS_OBJECTcastZend/zend_enum.c— enum case zval typeRepro
Scope (this repo)
lib/VM/EnumCaseSupport.phplib/VM.phpTYPE_CAST_OBJECTon enum operandslib/JIT/test/compliance/cases/language/enum_object_cast.phptgreenDone when (php-src-strict)
===identity +instanceoffor backed and unit enums)lib//ext/Related
(array)cast (distinct) · Language: echo / concat / (string) cast on enum cases must Error — not coerce backing scalar (Zend/zend_enum.c) #9661(string)cast · enum cluster Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492