diff options
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r-- | ext/reflection/php_reflection.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index ecdec41e03..6aa4d4a24d 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -6190,7 +6190,7 @@ ZEND_METHOD(reflection_reference, fromArrayElement) } /* Treat singleton reference as non-reference. */ - if (Z_TYPE_P(item) != IS_REFERENCE || Z_REFCOUNT_P(item) == 1) { + if (Z_TYPE_P(item) != IS_REFERENCE) { RETURN_NULL(); } @@ -6238,6 +6238,30 @@ ZEND_METHOD(reflection_reference, getId) } /* }}} */ +/* {{{ proto public int ReflectionReference::getRefcount() + * Returns reference count of the held reference. + * ReflectionReference itself increases the refcount, as such: + * * Refcount 1 indicates that the reference is only held by this ReflectionReference. + * * Refcount 2 indicates that it is a singleton reference (often not treated as a reference). + * * Refcount 3 or higher is an ordinary shared reference. */ +ZEND_METHOD(reflection_reference, getRefcount) +{ + reflection_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + intern = Z_REFLECTION_P(getThis()); + if (Z_TYPE(intern->obj) != IS_REFERENCE) { + _DO_THROW("Corrupted ReflectionReference object"); + return; + } + + RETURN_LONG(Z_REFCOUNT(intern->obj)); +} +/* }}} */ + /* {{{ method tables */ static const zend_function_entry reflection_exception_functions[] = { PHP_FE_END @@ -6727,6 +6751,7 @@ ZEND_END_ARG_INFO() static const zend_function_entry reflection_reference_functions[] = { ZEND_ME(reflection_reference, fromArrayElement, arginfo_reflection_reference_fromArrayElement, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) ZEND_ME(reflection_reference, getId, arginfo_reflection__void, ZEND_ACC_PUBLIC) + ZEND_ME(reflection_reference, getRefcount, arginfo_reflection__void, ZEND_ACC_PUBLIC) /* Always throwing dummy methods */ ZEND_ME(reflection, __clone, arginfo_reflection__void, ZEND_ACC_PRIVATE) |