@@ -4502,50 +4502,61 @@ ZEND_METHOD(ReflectionClass, hasConstant)
45024502}
45034503/* }}} */
45044504
4505- /* {{{ proto public array ReflectionClass::getConstants()
4505+ /* {{{ proto public array ReflectionClass::getConstants([int $filter = ReflectionClassConstant::IS_PUBLIC | ReflectionClassConstant::IS_PROTECTED | ReflectionClassConstant::IS_PRIVATE] )
45064506 Returns an associative array containing this class' constants and their values */
45074507ZEND_METHOD (ReflectionClass , getConstants )
45084508{
45094509 reflection_object * intern ;
45104510 zend_class_entry * ce ;
45114511 zend_string * key ;
4512- zend_class_constant * c ;
4512+ zend_class_constant * constant ;
45134513 zval val ;
4514+ zend_long filter = ZEND_ACC_PPP_MASK ;
45144515
4515- if (zend_parse_parameters_none ( ) == FAILURE ) {
4516+ if (zend_parse_parameters ( ZEND_NUM_ARGS (), "|l" , & filter ) == FAILURE ) {
45164517 RETURN_THROWS ();
45174518 }
4519+
45184520 GET_REFLECTION_OBJECT_PTR (ce );
4521+
45194522 array_init (return_value );
4520- ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> constants_table , key , c ) {
4521- if (UNEXPECTED (zval_update_constant_ex (& c -> value , ce ) != SUCCESS )) {
4523+ ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> constants_table , key , constant ) {
4524+ if (UNEXPECTED (zval_update_constant_ex (& constant -> value , ce ) != SUCCESS )) {
45224525 zend_array_destroy (Z_ARRVAL_P (return_value ));
45234526 RETURN_NULL ();
45244527 }
4525- ZVAL_COPY_OR_DUP (& val , & c -> value );
4526- zend_hash_add_new (Z_ARRVAL_P (return_value ), key , & val );
4528+
4529+ if (Z_ACCESS_FLAGS (constant -> value ) & filter ) {
4530+ ZVAL_COPY_OR_DUP (& val , & constant -> value );
4531+ zend_hash_add_new (Z_ARRVAL_P (return_value ), key , & val );
4532+ }
45274533 } ZEND_HASH_FOREACH_END ();
45284534}
45294535/* }}} */
45304536
4531- /* {{{ proto public array ReflectionClass::getReflectionConstants()
4537+ /* {{{ proto public ReflectionClassConstant[] ReflectionClass::getReflectionConstants([int $filter = ReflectionClassConstant::IS_PUBLIC | ReflectionClassConstant::IS_PROTECTED | ReflectionClassConstant::IS_PRIVATE] )
45324538 Returns an associative array containing this class' constants as ReflectionClassConstant objects */
45334539ZEND_METHOD (ReflectionClass , getReflectionConstants )
45344540{
45354541 reflection_object * intern ;
45364542 zend_class_entry * ce ;
45374543 zend_string * name ;
45384544 zend_class_constant * constant ;
4545+ zend_long filter = ZEND_ACC_PPP_MASK ;
45394546
4540- if (zend_parse_parameters_none ( ) == FAILURE ) {
4547+ if (zend_parse_parameters ( ZEND_NUM_ARGS (), "|l" , & filter ) == FAILURE ) {
45414548 RETURN_THROWS ();
45424549 }
4550+
45434551 GET_REFLECTION_OBJECT_PTR (ce );
4552+
45444553 array_init (return_value );
45454554 ZEND_HASH_FOREACH_STR_KEY_PTR (& ce -> constants_table , name , constant ) {
4546- zval class_const ;
4547- reflection_class_constant_factory (name , constant , & class_const );
4548- zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & class_const );
4555+ if (Z_ACCESS_FLAGS (constant -> value ) & filter ) {
4556+ zval class_const ;
4557+ reflection_class_constant_factory (name , constant , & class_const );
4558+ zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & class_const );
4559+ }
45494560 } ZEND_HASH_FOREACH_END ();
45504561}
45514562/* }}} */
@@ -6722,17 +6733,21 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
67226733 zend_declare_property_string (reflection_property_ptr , "name" , sizeof ("name" )- 1 , "" , ZEND_ACC_PUBLIC );
67236734 zend_declare_property_string (reflection_property_ptr , "class" , sizeof ("class" )- 1 , "" , ZEND_ACC_PUBLIC );
67246735
6736+ REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_STATIC" , ZEND_ACC_STATIC );
6737+ REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PUBLIC" , ZEND_ACC_PUBLIC );
6738+ REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PROTECTED" , ZEND_ACC_PROTECTED );
6739+ REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PRIVATE" , ZEND_ACC_PRIVATE );
6740+
67256741 INIT_CLASS_ENTRY (_reflection_entry , "ReflectionClassConstant" , class_ReflectionClassConstant_methods );
67266742 reflection_init_class_handlers (& _reflection_entry );
67276743 reflection_class_constant_ptr = zend_register_internal_class (& _reflection_entry );
67286744 zend_class_implements (reflection_class_constant_ptr , 1 , reflector_ptr );
67296745 zend_declare_property_string (reflection_class_constant_ptr , "name" , sizeof ("name" )- 1 , "" , ZEND_ACC_PUBLIC );
67306746 zend_declare_property_string (reflection_class_constant_ptr , "class" , sizeof ("class" )- 1 , "" , ZEND_ACC_PUBLIC );
67316747
6732- REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_STATIC" , ZEND_ACC_STATIC );
6733- REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PUBLIC" , ZEND_ACC_PUBLIC );
6734- REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PROTECTED" , ZEND_ACC_PROTECTED );
6735- REGISTER_REFLECTION_CLASS_CONST_LONG (property , "IS_PRIVATE" , ZEND_ACC_PRIVATE );
6748+ REGISTER_REFLECTION_CLASS_CONST_LONG (class_constant , "IS_PUBLIC" , ZEND_ACC_PUBLIC );
6749+ REGISTER_REFLECTION_CLASS_CONST_LONG (class_constant , "IS_PROTECTED" , ZEND_ACC_PROTECTED );
6750+ REGISTER_REFLECTION_CLASS_CONST_LONG (class_constant , "IS_PRIVATE" , ZEND_ACC_PRIVATE );
67366751
67376752 INIT_CLASS_ENTRY (_reflection_entry , "ReflectionExtension" , class_ReflectionExtension_methods );
67386753 reflection_init_class_handlers (& _reflection_entry );
0 commit comments