Hi internals,
I've sent a mail about this before, but as this turned into a bit of a
larger change (also allowing "abstract private" methods in traits) and
there's some backwards compatibility impact, I've created a proper RFC for
this:
https://wiki.php.net/rfc/abstract_trait_method_validation
Regards,
Nikita
Hi internals,
I've sent a mail about this before, but as this turned into a bit of a
larger change (also allowing "abstract private" methods in traits) and
there's some backwards compatibility impact, I've created a proper RFC for
this:
Based on Nicolas' feedback, I've adjusted the RFC to not validate the
visibility of the method (only the signature and "static-ness"). The reason
is outlined in the last paragraph of the Proposal section.
With that done, I plan to open voting on this tomorrow, unless something
new comes up.
Regards,
Nikita
Hi internals,
I've sent a mail about this before, but as this turned into a bit of a
larger change (also allowing "abstract private" methods in traits) and
there's some backwards compatibility impact, I've created a proper RFC for
this:Based on Nicolas' feedback, I've adjusted the RFC to not validate the
visibility of the method (only the signature and "static-ness"). The reason
is outlined in the last paragraph of the Proposal section.With that done, I plan to open voting on this tomorrow, unless something
new comes up.Regards,
Nikita
To clarify, this the signature enforcement is only applied to abstract
methods that come from traits, correct? This code will remain valid?
trait CompareHelper {
function compareTo($obj): bool {}
}
class C1 {
use CompareHelper;
function compareTo(self $obj) {}
}
Notably, non-abstract methods will be able to change argument counts,
their type, the return type, all without restriction. Correct? I don't
particularly like code like this, but I've seen it out there on more
than one occasion.
On Tue, Mar 3, 2020 at 10:40 PM Levi Morrison levi.morrison@datadoghq.com
wrote:
On Fri, Feb 7, 2020 at 11:32 AM Nikita Popov nikita.ppv@gmail.com
wrote:Hi internals,
I've sent a mail about this before, but as this turned into a bit of a
larger change (also allowing "abstract private" methods in traits) and
there's some backwards compatibility impact, I've created a proper RFC
for
this:Based on Nicolas' feedback, I've adjusted the RFC to not validate the
visibility of the method (only the signature and "static-ness"). The
reason
is outlined in the last paragraph of the Proposal section.With that done, I plan to open voting on this tomorrow, unless something
new comes up.Regards,
NikitaTo clarify, this the signature enforcement is only applied to abstract
methods that come from traits, correct? This code will remain valid?trait CompareHelper { function compareTo($obj): bool {} } class C1 { use CompareHelper; function compareTo(self $obj) {} }
Notably, non-abstract methods will be able to change argument counts,
their type, the return type, all without restriction. Correct? I don't
particularly like code like this, but I've seen it out there on more
than one occasion.
That's right, this RFC is exclusively about abstract methods. No validation
is performed for non-abstract methods.
Nikita
Hi internals,
I've sent a mail about this before, but as this turned into a bit of a
larger change (also allowing "abstract private" methods in traits) and
there's some backwards compatibility impact, I've created a proper RFC for
this:
This RFC has been accepted unanimously with 52 votes in favor.
Nikita