On Tue, May 27, 2025 at 9:41 PM Ben Ramsey <ram...@php.net> wrote:

>
> 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

Reply via email to