åæå㎠case ã¯ãåŽæ°ã¨ããĻ襨įžãããĻãããŽã§ã ãģã¨ããŠãŽåŽæ°åŧãŽä¸ã§éįãĒå¤ã¨ããĻäŊŋããžãã ã¤ãžãããããããŖãŽãããŠãĢãå¤ãã static 夿°ãŽãããŠãĢãå¤ãããŠãĄãŧãŋãŽãããŠãĢãå¤ã ã°ããŧããĢåŽæ°ãã¯ãŠãšåŽæ°ãŽå¤ã¨ããĻäŊŋããžãã åæå㎠case äģĨå¤ãŽå¤ã¯äŊŋããžãããã é常ãŽåŽæ°ã¯ãåæå㎠case ãåį §ã§ããžãã
ããããĒãããåæåãŽä¸ã§ ArrayAccess ãŽãããĒæéģãŽãã¸ãã¯ãĄãŊãããŽåŧãŗåēããčĄããã¨ã¯ã åŽæ°ã static ãĒåŽįžŠã§ã¯č¨ąãããžããã ãĒããĒããįĩæãŽå¤ãäŋč¨ŧã§ããĒããĒããžããã å¯äŊį¨ããžãŖãããĒããã¨ãäŋč¨ŧã§ããĒãããã§ãã éĸæ°ãŗãŧãĢããĄãŊãããŗãŧãĢããããĻãããããŖã¸ãŽãĸã¯ãģãšã¯ã åŧãįļãåŽæ°åŧã§ã¯ä¸æŖãĒæäŊã¨ããĻæąãããžãã
<?php
// ããã¯ãåŽå
¨ãĢæŖããåæåãŽåŽįžŠã§ã
enum Direction implements ArrayAccess
{
case Up;
case Down;
public function offsetExists($offset): bool
{
return false;
}
public function offsetGet($offset): mixed
{
return null;
}
public function offsetSet($offset, $value): void
{
throw new Exception();
}
public function offsetUnset($offset): void
{
throw new Exception();
}
}
class Foo
{
// ããã¯ã訹ãããĻããžãã
const DOWN = Direction::Down;
// ããã¯ã訹å¯ãããžãããįĩæãŽå¤ãäŋč¨ŧã§ããĒãå¯čŊæ§ããããžãã
const UP = Direction::Up['short'];
// Fatal error: Cannot use [] on enums in constant expression
}
// ããã¯ãåŽå
¨ãĢæŖãããŗãŧãã§ããåŽæ°åŧã§ã¯ãĒãããã§ãã
$x = Direction::Up['short'];
var_dump("\$x is " . var_export($x, true));
$foo = new Foo();