Bug #62204 [Com]: Final keyword not enforced for methods from traits
| From: | ilutov@php.net | Date: | Mon, 06 Dec 2021 22:57:10 +0000 |
| Subject: | Bug #62204 [Com]: Final keyword not enforced for methods from traits | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-238230@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=62204&edit=1
ID: 62204
Comment by: ilutov@php.net
Reported by: gron@php.net
Summary: Final keyword not enforced for methods from traits
Status: Verified
Type: Bug
Package: Scripting Engine problem
PHP Version: 5.4Git-2012-06-01 (Git)
Block user comment: N
Private report: N
New Comment:
When the method is defined in both the trait and the current class the method isn't
"overridden" per se (even though the docs word it this way) but rather the trait method is
discarded.
For the same reason LSP isn't validated either. https://3v4l.org/RZB2K
IMO we should fix both or neither. But I'm leaning towards the latter.
Previous Comments:
------------------------------------------------------------------------
[2021-09-16 11:53:57] cmb@php.net
Still unresolved: <https://3v4l.org/fG69k>.
------------------------------------------------------------------------
[2013-06-03 12:28:35] alasdair at softhome dot net
Still exists in PHP 5.4.4-14 on Debian Wheezy.
------------------------------------------------------------------------
[2013-03-19 12:30:10] wolters dot fl at gmail dot com
This bug still exists in PHP version 5.4.13. I've created a simple example at https://gist.github.com/FlorianWolters/5195674
to reproduce the behaviour described in the bug report.
IMHO the "final" keyword MUST be enforced when used in a trait.
------------------------------------------------------------------------
[2012-06-01 07:53:36] gron@php.net
Description:
------------
Reported by Scott MacVicar on the mailing list (May 4th).
Added here to not forget about it.
> On 04 May 2012, at 20:30, Scott MacVicar wrote:
>
> This caused a few bugs for us / confusion. The final keyword is accepted
inside a trait but it the class also
defines a method without the final keyword this takes precedence.
>
> Two solutions:
> Enforce final when a trait defines -
> https://whisky.macvicar.net/patches/0001-
If-a-trait-declares-a-method-
as-final-enforce-that.patch
>
> Prohibit final form being used in a trait -
https://whisky.macvicar.net/patches/002-traits-Disable-use-of-
final-keyword.patch
>
> I'm for the first solution here
>
> - S
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=62204&edit=1