php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #62204 Final keyword not enforced for methods from traits
Submitted: 2012-06-01 07:53 UTC Modified: 2021-09-16 11:53 UTC
Votes:8
Avg. Score:4.0 ± 1.0
Reproduced:5 of 5 (100.0%)
Same Version:2 (40.0%)
Same OS:2 (40.0%)
From: gron@php.net Assigned:
Status: Verified Package: Scripting Engine problem
PHP Version: 5.4Git-2012-06-01 (Git) OS:
Private report: No CVE-ID: None
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
48 + 46 = ?
Subscribe to this entry?

 
 [2012-06-01 07:53 UTC] 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



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-06-03 17:21 UTC] felipe@php.net
-Status: Open +Status: Assigned -Package: *Compile Issues +Package: Scripting Engine problem -Assigned To: +Assigned To: gron
 [2013-03-19 12:30 UTC] 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.
 [2013-06-03 12:28 UTC] alasdair at softhome dot net
Still exists in PHP 5.4.4-14 on Debian Wheezy.
 [2017-10-24 07:04 UTC] kalle@php.net
-Status: Assigned +Status: Open -Assigned To: gron +Assigned To:
 [2021-09-16 11:53 UTC] cmb@php.net
-Status: Open +Status: Verified
 [2021-09-16 11:53 UTC] cmb@php.net
Still unresolved: <https://3v4l.org/fG69k>.
 [2021-12-06 22:57 UTC] ilutov@php.net
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.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Oct 04 03:01:26 2024 UTC