Add leading backslash to enum and class names in var_export
| From: | Ilija Tovilo | Date: | Thu, 31 Mar 2022 15:45:29 +0000 |
| Subject: | Add leading backslash to enum and class names in var_export | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-117466@lists.php.net to get a copy of this message | ||
Hi everyone
We've had two bug reports for var_export not working for enums. The
reason for that is that var_export does not add a leading backslash to
names of enums. This will cause them to be resolved as
\CurrentNamespace\EnumNamespace\EnumName instead of just
\EnumNamespace\EnumName.
enum A {
case B;
}
echo var_export(A::B, true), "\n";
> A::B
This is a problem for things like Doctrines ProxyGenerator that embeds
the result of var_export in classes with namespaces
(https://github.com/doctrine/common/pull/955). The Doctrine team
resolved this by adding a use of the enum at the top of the file but
that really shouldn't be necessary.
The same issue already exists for classes.
class C {}
echo var_export(new C(), true), "\n";
> C::__set_state(array(
> ))
https://bugs.php.net/bug.php?id=64554
Marco Pivetta created a PR that adds leading backslash to all class or
enum names of var_export. Adding a backslash will make the code work
both inside or outside namespaces.
https://github.com/php/php-src/pull/8233
To avoid disruption, I'm proposing to merge this into PHP 8.2 only.
Unless anybody has any objections to this change I will merge it in a
few weeks.
Ilija