Re: [PHP-DEV] Re: Changing the generated name for anon classes

  108423
February 7, 2020 13:35 nikita.ppv@gmail.com (Nikita Popov)
On Thu, Feb 6, 2020 at 9:08 PM Andrea Faulds <ajf@ajf.me> wrote:

> Hi, > > Nikita Popov wrote: > > Hi internals, > > > > Based on a suggestion by Nicolas Grekas, > > https://github.com/php/php-src/pull/5153 changes the generated name for > > anonymous classes to include the name of the parent class or first > > interface. So instead of just class@anonymous, you'll see something like > > EventHandler@anonymous in error messages, for example. > > > > There's a minor BC break here, for code checking for a "class@anonymous" > > prefix, which should be easy to rectify by checking for "@anonymous" > > instead. > > > > What do people think about doing this change? > > > > Regards, > > Nikita > > > > Perhaps it would make sense to include the namespace used by the code > which defines/instantiates the class? That might make it easier, when > looking at a mysterious anonymous class using var_dump() deep in a big > project perhaps, to find out where it came from. >
That would be a possible alternative. This is similar to what we do for closures. As we need the generated name to be reasonably concise, we can only do one or the other though. I don't know which one is more useful... Maybe Nicolas wants to chime in. Nikita
  108533
February 13, 2020 10:42 nikita.ppv@gmail.com (Nikita Popov)
On Fri, Feb 7, 2020 at 2:35 PM Nikita Popov ppv@gmail.com> wrote:

> On Thu, Feb 6, 2020 at 9:08 PM Andrea Faulds <ajf@ajf.me> wrote: > >> Hi, >> >> Nikita Popov wrote: >> > Hi internals, >> > >> > Based on a suggestion by Nicolas Grekas, >> > https://github.com/php/php-src/pull/5153 changes the generated name for >> > anonymous classes to include the name of the parent class or first >> > interface. So instead of just class@anonymous, you'll see something >> like >> > EventHandler@anonymous in error messages, for example. >> > >> > There's a minor BC break here, for code checking for a "class@anonymous >> " >> > prefix, which should be easy to rectify by checking for "@anonymous" >> > instead. >> > >> > What do people think about doing this change? >> > >> > Regards, >> > Nikita >> > >> >> Perhaps it would make sense to include the namespace used by the code >> which defines/instantiates the class? That might make it easier, when >> looking at a mysterious anonymous class using var_dump() deep in a big >> project perhaps, to find out where it came from. >> > > That would be a possible alternative. This is similar to what we do for > closures. > > As we need the generated name to be reasonably concise, we can only do one > or the other though. I don't know which one is more useful... Maybe Nicolas > wants to chime in. >
I've scrolled through anon class uses in popular composer packages, and that convinced me that parent/interface is probably the most useful information here. Adding the namespace prefix leaves you with something like "Amp\class@anonymous", which doesn't really tell you anything at all, while adding the interface gives you "Amp\CancellationToken@anonymous", which is fairly meaningful. Many more examples like this. Nikita