Edit report at http://bugs.php.net/bug.php?id=52215&edit=1
ID: 52215 Updated by: [email protected] Reported by: dev at alepe dot com Summary: Add var_ref_count() Status: Open Type: Feature/Change Request Package: Variables related Operating System: Any PHP Version: 5.3.3RC1 New Comment: http://www.php.net/manual/en/function.debug-zval-dump.php Previous Comments: ------------------------------------------------------------------------ [2010-07-01 03:34:42] dev at alepe dot com Please excuse me if I have some theoretical misconceptions or if my English is not very good. ------------------------------------------------------------------------ [2010-07-01 03:33:03] dev at alepe dot com Description: ------------ It seems there is no easy way to know if an object/array/... is reference. Looking at the source code of ext/standard/var.c it seems it may be not so hard to add that function. As debug_zval_dump already outputs the reference count, it would be better to obtain that value in order to determine if an object is referenced or not. Maybe something like (I'm not C programmer): PHPAPI void php_var_ref_count(zval **struc) { return Z_REFCOUNT_PP(struc); } Knowing the reference count may be helpful to: - make copies of a structure without references - remove variables that have more than 1 reference (safe remove) - remove variables that are not referenced (unused values) - prevent modifying a variable that is referenced I believe there must be more applications but these are the ones I can think of. (background: http://stackoverflow.com/questions/3148125/php-check-if-object-array-is-a-reference) Test script: --------------- <?php $en = array("a" => "apple", "b" => "banana"); $es = array("a" => "manzana", "b" => "platano"); $dict = array( "Eng" => $en, "Esp" => $es, "Non" => array("a" => "A", "b" => "B") ); echo var_ref_count($dict["Eng"]); echo " # "; echo var_ref_count($dict["Non"]); ?> Expected result: ---------------- 2 # 1 Actual result: -------------- None (inexistent) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52215&edit=1
