On Thu, Mar 31, 2022, at 10:45 AM, Ilija Tovilo wrote:
> 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

What would be the disruption on 8.1?  It wouldn't break the existing `use` 
trick, and I doubt anyone is leveraging this deliberately.

--Larry Garfield

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to