I am refactoring a PHP OOP legacy website.
I am so tempted to start using 'final' on classes to "
make it explicit that the class is currently not extended by anything". This might save lots of time if I come to a class and I am wondering if I can rename/delete/modify a
protected property or method. If I really want to extend a class I can just remove the final keyword to unlock it for extending.
I.e If I come to a class that has no child classes I can record that knowledge by marking the class a final. The next time I come to it I would not have to re-search the codebase to see if it has children. Thus saving time during refactorings.
It all seems like a sensible time saving idea.... but I have often read that classes should only be made 'final' on rare/special occasions.
Have you ever treated
final liberally and had bad experiences or is this 'fear of final' just a myth.
Maybe it screws up Mock object creation or has other side effects that I am not thinking of.
What am I missing?