Req #52215 [Com]: Add var_ref_count()

From: Date: Fri, 15 Aug 2014 03:39:51 +0000
Subject: Req #52215 [Com]: Add var_ref_count()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-187133@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=52215&edit=1

 ID:                 52215
 Comment by:         ky dot patterson at adlinkr dot com
 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
 Block user comment: N
 Private report:     N

 New Comment:

This cannot be done with a function.

The act of passing a variable to a function (by reference or by value) changes or replaces the
variable's zval.
So the refcount you will get is inaccurate -- and not just "off by 1", because zend may
copy the zval before it is passed to your function.

There are several other bugs that either ask for a refcount function, or ask for debug_zval_dump to
be "fixed" to support pass-by-reference, and all of them are not workable AFAIK:
https://bugs.php.net/bug.php?id=40011 Request
for refcount function
https://bugs.php.net/bug.php?id=52215 Add
var_ref_count()
https://bugs.php.net/bug.php?id=66455 Missing
function to determine refcount of variables directy
https://bugs.php.net/bug.php?id=53895
debug_zval_dump should be by ref

I *think* the solution is actually to add new language constructs, and I have opened a bug to
discuss that:
https://bugs.php.net/bug.php?id=67847


Previous Comments:
------------------------------------------------------------------------
[2012-09-23 22:09:51] chrisw at networkm dot co dot uk

The problem (such as it is) that this issue creates is larger in PHP 5.4. Because 
call-time pass by reference now causes a fatal error, debug_zval_dump() is now 
completely pointless (the data it can provide can obtained from var_dump()). 
Either it should be removed and something like var_ref_count() should be added, or 
it should be altered to take it's argument by reference.

------------------------------------------------------------------------
[2011-05-09 19:07:17] thegreatall at gmail dot com

I recently wrote a simple modification to the php source, which returns the 
number of references linked to a variable. It does suffer from the same problem 
that debug_zval_dump suffers from, but it is simply always +1 than what you 
expect. Aadding a note in the documentation saying "The value will always be 1 
more than the actual reference count." or just -1 from the returned value should 
work.

If there's even a chance that this would be reviewed and possibly added into 
php's source, I would be happy to make a patch for it. This function may not 
seem critical, but I developed a framework that does allot of class recycling 
and it would be nice to have the ability to figure out what variables it can 
release, and a function like this or what I wrote would be HUGE in terms of 
memory management. A conversion script I wrote uses upwards of 1-3 gigs of ram 
if I recycle variables, but I could reduce that number to <10 megs if I could 
figure out what variables are free'able. The workaround I have to work with now 
is to either "guess" what isn't being used (which is almost always wrong) or to 
not use any object recycling which is alot slower because it needs to initiate a 
new object every time, and you can have 2 different objects to the same data 
(which the huge downside to it is that there can be 2 objects for the same 
record/data).

------------------------------------------------------------------------
[2010-07-01 13:44:40] derick@php.net

This won't work, for the same reason that debug_zval_dump() is flawed. By passing a variable to
a function, you mess with the refcount/is_ref values. Xdebug's xdebug_debug_zval()
(http://xdebug.org/docs/all_functions#xdebug_debug_zval) goes around that by looking up the symbol
directly (but it doesn't support array elements directly).

------------------------------------------------------------------------
[2010-07-01 03:49:32] dtajchreber@php.net

http://www.php.net/manual/en/function.debug-zval-dump.php

------------------------------------------------------------------------
[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.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=52215


--
Edit this bug report at https://bugs.php.net/bug.php?id=52215&edit=1


Thread (8 messages)

« previous php.bugs (#187133) next »