Hi internals
I’d like to start off some preliminary discussion about expanding the places
that #[\Deprecated]
can be used, and more widely how userland code can have
the engine trigger deprecation warnings (rather than just manually calling
trigger_error()
). This is intended to be a follow-up to the addition of
attributes on constants - it is now possible to use attributes so that the
engine emits warnings when
- Calling a function or method
- Accessing a class constant
- Accessing a global constant
My inspiration is MediaWiki’s “Stable Interface Policy”[1] - there are some
things that MediaWiki (and other libraries) may want to deprecate, but that do
not trigger deprecation warnings, or require work-arounds to trigger them
manually with trigger_error()
. Specifically, I want to get the community’s
thoughts on adding ways to
- Deprecate
use
ing traits - Deprecate extending a class
- Deprecate overriding a method
- Deprecate implementing an interface
- Deprecate accessing a public/protected property
- Deprecate class aliases (maybe a new way to declare aliases with
#[\ClassAlias]
?)
Having learned my lesson from the never-parameters RFC, I want to get a sense
of support/opposition before spending time on the implementations. I also want
a sense of which parts would need individual RFCs, and if those RFCs would be
welcomed without first providing an implementation.
- Daniel