Hi all,
I would like to propose we formally deprecate the function debug_zval_dump and remove it in PHP 9.0.
This function is mostly similar to var_dump, with the additional ability to output the refcount of a
variable. This has always been hard to interpret, but is now so complex as to be effectively
useless:
- Because it is implemented as a function taking a parameter in the normal way, the refcount has
been modified by the time it is displayed. Depending on the value passed, this may include reference
separation; in older versions of PHP, it was possible to affect this directly by forcing a
pass-by-reference. The manual still discusses this, but it hasn't been possible since PHP 5.4.
[1]
- Since PHP 7, some types don't have a refcount at all, and references are represented by
additional levels of zval. Without completely changing the output format, this information is
impossible to convey accurately.
- Optimisations affect the refcount in increasingly non-obvious ways. For instance, an array defined
literally in the source code has an extra counted reference compared to one which has been modified
at runtime. [2]
Since this is a rather specialised piece of debugging information, not useful to the average user, I
think it should be left to dedicated debugging tools. XDebug includes an equivalent function that
takes a name and looks it up in the symbol table, avoiding some of the worst issues [3]. I'm
not familiar with PHPDBG, and it doesn't seem to have much documentation, but I assume it would
be able to display this as well.
I notice there's a draft for an omnibus "deprecations for PHP 8.1" RFC [4]. Should I
add this there, or raise a separate RFC?
Refs:
1: https://www.php.net/debug-zval-dump
2: https://3v4l.org/DVi3f
3: https://xdebug.org/docs/all_functions#xdebug_debug_zval
4: https://wiki.php.net/rfc/deprecations_php_8_1
Regards,
--
Rowan Tommins
[IMSoP]