On Sat, Feb 27, 2021 at 3:00 PM Rowan Tommins <rowan.coll...@gmail.com>
wrote:

> 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]


Can't say I've had much use for debug_zval_dump(), but I don't really see
the motivation for removing it either.

For PHP 8.1, I have already adjusted it to dump "interned" instead of a
refcount for interned strings and immutable arrays. If we additionally
change it to explicitly print reference wrappers, I believe that
debug_zval_dump() will produce a faithful representation.

Regards,
Nikita

Reply via email to