Hi! Lars Schultz wrote:
As you can see I boldly used the function reference_count(Object) even though it doesn't exist. This is exactly what I'd need to allow my concept to work.
Some time ago I created a patch to implement a ref_count() function which works the way you suggested. But I'm not sure if it's OK/complete... and I'm not sure if something like that is really needed in the core (and I'm definetly not the person to decide on that ;-)).
Anyway, I attatched a simple patch against current 5_2 branch to this mail, perhaps it helps.
Best regards Andreas
Index: basic_functions.c =================================================================== RCS file: /repository/php-src/ext/standard/basic_functions.c,v retrieving revision 1.725.2.31.2.39 diff -u -r1.725.2.31.2.39 basic_functions.c --- basic_functions.c 1 Jan 2007 09:36:08 -0000 1.725.2.31.2.39 +++ basic_functions.c 19 Jan 2007 17:04:39 -0000 @@ -3040,6 +3040,11 @@ /* }}} */ /* {{{ var.c */ static +ZEND_BEGIN_ARG_INFO(arginfo_ref_count, 0) + ZEND_ARG_INFO(0, var) +ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_var_dump, 0, 0, 1) ZEND_ARG_INFO(0, var) ZEND_ARG_INFO(0, ...) @@ -3384,6 +3389,7 @@ PHP_FE(serialize, arginfo_serialize) PHP_FE(unserialize, arginfo_unserialize) + PHP_FE(ref_count, arginfo_ref_count) PHP_FE(var_dump, arginfo_var_dump) PHP_FE(var_export, arginfo_var_export) PHP_FE(debug_zval_dump, arginfo_debug_zval_dump) Index: php_var.h =================================================================== RCS file: /repository/php-src/ext/standard/php_var.h,v retrieving revision 1.30.2.1.2.5 diff -u -r1.30.2.1.2.5 php_var.h --- php_var.h 1 Jan 2007 09:36:08 -0000 1.30.2.1.2.5 +++ php_var.h 19 Jan 2007 17:04:39 -0000 @@ -23,6 +23,7 @@ #include "ext/standard/php_smart_str_public.h" +PHP_FUNCTION(ref_count); PHP_FUNCTION(var_dump); PHP_FUNCTION(var_export); PHP_FUNCTION(debug_zval_dump); Index: var.c =================================================================== RCS file: /repository/php-src/ext/standard/var.c,v retrieving revision 1.203.2.7.2.14 diff -u -r1.203.2.7.2.14 var.c --- var.c 1 Jan 2007 09:36:09 -0000 1.203.2.7.2.14 +++ var.c 19 Jan 2007 17:04:39 -0000 @@ -39,6 +39,21 @@ #define Z_REFCOUNT_PP(a) ((*a)->refcount) /* }}} */ +/* {{{ proto int ref_count(mixed var) + return the number of references pointing to a var */ +PHP_FUNCTION(ref_count) +{ + zval *var; + int cnt = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &var) == FAILURE) { + RETURN_NULL(); + } + + cnt = var->refcount; + RETURN_LONG (cnt); +}; +/* }}} */ /* {{{ php_var_dump */ static int php_array_element_dump(zval **zv, int num_args, va_list args, zend_hash_key *hash_key)
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php