Skip to content

Commit 673c858

Browse files
committed
Implement ReflectionClassConstant::isEnumCase()
1 parent 7bd0f86 commit 673c858

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

ext/reflection/php_reflection.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3706,6 +3706,16 @@ ZEND_METHOD(ReflectionClassConstant, getAttributes)
37063706
}
37073707
/* }}} */
37083708

3709+
ZEND_METHOD(ReflectionClassConstant, isEnumCase)
3710+
{
3711+
reflection_object *intern;
3712+
zend_class_constant *ref;
3713+
3714+
GET_REFLECTION_OBJECT_PTR(ref);
3715+
3716+
RETURN_BOOL(ref->attr & ZEND_CLASS_CONST_IS_CASE);
3717+
}
3718+
37093719
/* {{{ reflection_class_object_ctor */
37103720
static void reflection_class_object_ctor(INTERNAL_FUNCTION_PARAMETERS, int is_object)
37113721
{

ext/reflection/php_reflection.stub.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,9 @@ public function getDocComment() {}
470470

471471
/** @return ReflectionAttribute[] */
472472
public function getAttributes(?string $name = null, int $flags = 0): array {}
473+
474+
/** @return bool */
475+
public function isEnumCase() {}
473476
}
474477

475478
class ReflectionParameter implements Reflector

ext/reflection/php_reflection_arginfo.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: c2f68146b8e3a10808080c2a27e7710e819efeab */
2+
* Stub hash: 692f70abe2995866533011af18d4fd17b2f074d9 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 0, 1)
55
ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0)
@@ -358,6 +358,8 @@ ZEND_END_ARG_INFO()
358358

359359
#define arginfo_class_ReflectionClassConstant_getAttributes arginfo_class_ReflectionFunctionAbstract_getAttributes
360360

361+
#define arginfo_class_ReflectionClassConstant_isEnumCase arginfo_class_ReflectionFunctionAbstract_inNamespace
362+
361363
#define arginfo_class_ReflectionParameter___clone arginfo_class_ReflectionFunctionAbstract___clone
362364

363365
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ReflectionParameter___construct, 0, 0, 2)
@@ -642,6 +644,7 @@ ZEND_METHOD(ReflectionClassConstant, getModifiers);
642644
ZEND_METHOD(ReflectionClassConstant, getDeclaringClass);
643645
ZEND_METHOD(ReflectionClassConstant, getDocComment);
644646
ZEND_METHOD(ReflectionClassConstant, getAttributes);
647+
ZEND_METHOD(ReflectionClassConstant, isEnumCase);
645648
ZEND_METHOD(ReflectionParameter, __construct);
646649
ZEND_METHOD(ReflectionParameter, __toString);
647650
ZEND_METHOD(ReflectionParameter, getName);
@@ -903,6 +906,7 @@ static const zend_function_entry class_ReflectionClassConstant_methods[] = {
903906
ZEND_ME(ReflectionClassConstant, getDeclaringClass, arginfo_class_ReflectionClassConstant_getDeclaringClass, ZEND_ACC_PUBLIC)
904907
ZEND_ME(ReflectionClassConstant, getDocComment, arginfo_class_ReflectionClassConstant_getDocComment, ZEND_ACC_PUBLIC)
905908
ZEND_ME(ReflectionClassConstant, getAttributes, arginfo_class_ReflectionClassConstant_getAttributes, ZEND_ACC_PUBLIC)
909+
ZEND_ME(ReflectionClassConstant, isEnumCase, arginfo_class_ReflectionClassConstant_isEnumCase, ZEND_ACC_PUBLIC)
906910
ZEND_FE_END
907911
};
908912

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
ReflectionClassConstant::isEnumCase()
3+
--FILE--
4+
<?php
5+
6+
enum Foo {
7+
case Bar;
8+
const Baz = self::Bar;
9+
}
10+
11+
class Qux {
12+
const Quux = 0;
13+
}
14+
15+
var_dump((new ReflectionClassConstant(Foo::class, 'Bar'))->isEnumCase());
16+
var_dump((new ReflectionClassConstant(Foo::class, 'Baz'))->isEnumCase());
17+
var_dump((new ReflectionClassConstant(Qux::class, 'Quux'))->isEnumCase());
18+
19+
?>
20+
--EXPECT--
21+
bool(true)
22+
bool(false)
23+
bool(false)

0 commit comments

Comments
 (0)