I see that in some classes, like WANObjectCache, most methods are declared final. Why is this? Is it an attempt to optimize?
The problem is that PHPUnit mocks can't touch final methods. Any ->method() calls that try to do anything to them silently do nothing. This makes writing tests harder.
If we really want these methods to be marked final for some reason, the workaround for PHP is to make an interface that has all the desired methods, have the class implement the interface, and make type hints all refer to the interface instead of the class. But if there's no good reason to declare the methods final to begin with, it's simplest to just drop it.