Last night, I identified a need for
#[Deprecated]
on a userland class in
one of my libraries, but I had to settle on@deprecated
for the widest
range of compatibility.Has there been anymore thought on putting together an implementation for
this? I’m happy to draft an RFC if someone is able to help with the
implementation. I don’t understand the complexities around the
implementation, but is this something that could make it into 8.5, provided
an RFC vote passes?Cheers,
Ben
I'd be willing to work on the implementation, but what I'm wondering is
what exactly it would mean to deprecate a class. Without a clear idea of
the goal, I didn't include this in
https://news-web.php.net/php.internals/127305 even though I had considered
it. Would a deprecated class
- Emit warnings when constructed? Just deprecate the constructor,
https://3v4l.org/DNrqm - Emit warnings when used as a type? But we allow types to include classes
that don't exist (https://3v4l.org/pdkbv) so needing to look up the types
that are declared to emit warnings (rather than just when used to verify
that the type is respected) would presumably have a performance impact. - Emit warnings when extended? I suggested that in my email a few weeks
ago, and when I have time I was going to look into that - I was thinking
something like#[\WillBeFinal]
that would work for classes, methods,
properties, and constants, and would emit warnings just like
#[\Deprecated]
but not when a method is called or a constant is used,
just when things are overridden
What were you thinking in terms of desired semantics?
--Daniel