- 添加了枚举类型的语法解析功能 - 实现了对带值枚举(backed enums)的支持 - 添加了枚举案例值的存储和访问机制 - 支持枚举类型的运行时对象处理 - 完善了枚举常量数组的生成逻辑 - 新增了多个枚举相关的测试用例pull/1/head
parent
6849c56cc2
commit
26bdf5eb59
6 changed files with 130 additions and 0 deletions
@ -0,0 +1,41 @@ |
||||
--TEST-- |
||||
enum 2 |
||||
--FILE-- |
||||
<?php |
||||
enum T: string |
||||
{ |
||||
case I = 'int'; |
||||
case S = 'string'; |
||||
} |
||||
|
||||
final class TestSpa |
||||
{ |
||||
private const F = [ |
||||
'1' => ['d' => '', 't' => T::S], |
||||
'2' => ['d' => 1, 't' => T::I], |
||||
'3' => ['d' => 123, 't' => T::S], |
||||
]; |
||||
|
||||
public static function E(): array |
||||
{ |
||||
return self::F; |
||||
} |
||||
} |
||||
|
||||
function main() |
||||
{ |
||||
foreach (TestSpa::E() as $n => $f) { |
||||
|
||||
$ok = match ($f['t']) { |
||||
T::I => is_int($f['d']), |
||||
T::S => is_string($f['d']), |
||||
}; |
||||
|
||||
echo $ok? " pass {$n} => [{$f['d']}, {$f['t']->value}]\n": " fail {$n} 元组非法\n"; |
||||
} |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
pass 1 => [, string] |
||||
pass 2 => [1, int] |
||||
fail 3 元组非法 |
||||
@ -0,0 +1,30 @@ |
||||
--TEST-- |
||||
enum 2 |
||||
--FILE-- |
||||
<?php |
||||
enum TestEnum |
||||
{ |
||||
case FOO; |
||||
case BAR; |
||||
} |
||||
|
||||
final class TestSpa |
||||
{ |
||||
public const F = [ |
||||
TestEnum::FOO, |
||||
TestEnum::BAR, |
||||
]; |
||||
} |
||||
|
||||
function main() |
||||
{ |
||||
var_dump(TestSpa::F); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
array(2) { |
||||
[0]=> |
||||
enum(TestEnum::FOO) |
||||
[1]=> |
||||
enum(TestEnum::BAR) |
||||
} |
||||
@ -0,0 +1,31 @@ |
||||
--TEST-- |
||||
enum 2 |
||||
--FILE-- |
||||
<?php |
||||
enum TestEnum: string |
||||
{ |
||||
case FOO = TestSpa::F; |
||||
case BAR = 'bar'; |
||||
} |
||||
|
||||
final class TestSpa |
||||
{ |
||||
public const F = 'foo'; |
||||
} |
||||
|
||||
function main() |
||||
{ |
||||
var_dump(TestEnum::cases()); |
||||
var_dump(TestEnum::FOO); |
||||
var_dump((string) TestEnum::FOO->value); |
||||
} |
||||
?> |
||||
--EXPECT-- |
||||
array(2) { |
||||
[0]=> |
||||
enum(TestEnum::FOO) |
||||
[1]=> |
||||
enum(TestEnum::BAR) |
||||
} |
||||
enum(TestEnum::FOO) |
||||
string(3) "foo" |
||||
Loading…
Reference in new issue