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
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 ause
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/8233To 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
Le jeu. 31 mars 2022 à 17:50, Larry Garfield larry@garfieldtech.com a
écrit :
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 ause
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/8233To 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.
It could break fixtures that ppl might use to compare the two outputs of
var_export()
.
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 ause
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/8233To 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.
It might be worthwhile to point out that this issue already came up
years ago, and after some discussion[1] the idea was rejected back then.
That said, I'm not against changing this now, but would not want to do
that for any of the stable PHP versions. Targeting PHP 8.2 is fine for me.
[1] https://externals.io/message/67008
--
Christoph M. Becker
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.
As original author of var_export, I believe this is good to merge, but for PHP 8.2+ only.
cheers
Derick
Hi everyone
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/8233To 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.
Just another reminder. If there are no objections I will merge this next week.
Ilija