-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
make classes final for 2.0 #321
Conversation
Have all the internal classes been internal since 1.0? Otherwise making them final would technically be a BC break too. |
good point. the classes have been added in #128 and have been |
1651c9a
to
b89618e
Compare
What's the advantage of this? In userspace I might want to extend these classes despite that they are not covered by semver. |
the problem with non-final classes is that people will start extending them, and then complain when things break because we change their signature. extending a class can break in so many ways when the base class does not consider BC (method name clashes, changing a method from protected to public in the base class, ...) |
You say that, but it doesn't really happen. Not for internal classes. And when it does, it's easy to quickly close such requests. It's much more likely you will receive requests to remove those finals. Look how many of such requests are in moneyphp repository. |
i do remember a few cases where people complained when we broke stuff, and i remember tons of cases where we had huge discussions about breaking BC with changes in such classes. looking at what i want to make final, its really things about the layout in the debug toolbar. i don't expect people to need to customize that. if they want to provide visual tweaks (like you did in #355) that's awesome and should go into this repo rather than be project specific. |
e05e986
to
022456a
Compare
In classes marked |
that i don't remember. but what is your goal? would you only soft-mark the classes as internal, and allow people to break the rules and when things break for them, we can tell them "told you so"? @php-http/owners what is your take on making classes |
Yes, Yes, I don't expect need of extending these classes ever, but software engineering runs into unforeseen change of requirements all the time. |
8a896e7
to
6a589e2
Compare
f4d7483
to
3e38cc0
Compare
@xabbuh what is the current policy of symfony regarding final? i like the approach of making everything that is not meant to be extended final (which is almost everything in this bundle). there are interfaces that can be implemented if somebody needs to customize something. they can then just implement their own, or write decorators around the final classes. i am adding the annotations in #467 for the 1.x branch, as we agree on doing that. |
@dbu We don't have any strict rules but I guess nowadays new code often follows what Marco has written in https://ocramius.github.io/blog/when-to-declare-classes-final/. |
I also don't have anything against declaring classes final if they implement interface, like marco's post declares. This PR at the moment follows that |
39184b7
to
3ce84bc
Compare
i changed this MR to point to the 2.x branch and cleaned it up. does one of you want to review and merge? |
What's in this PR?
Declaring
final
all classes that are marked as@final
for the new major version