Am 28.05.2025, 06:54:22 schrieb Daniel Scherzer <daniel.e.scher...@gmail.com
>:

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

Hi Daniel, Hi Ben,

Tim and I ideated on this topic before, but we haven’t gotten further yet.
I wanted to share my notes though, so that you have them as one idea. Its
not more than a brain dump though:

   - Deprecated classes
      - mark the following elements deprecated:
         - constructor method (what if it doesnt have one?)
         - public static methods
         - public static properties
         - public constants
      - not public properties or methods, because the message is already
      generated on new DeprecatedClass
      - during generating the message see if its classed based and slightly
      change message to indicate its a class based deprecation

Reply via email to