I agree. And those static methods _are everywhere_. It may spawn a larger discussion on how to better emulate The Laravel Way(tm) for SS4 or even SS5 (depending on the effort required). That is, to implement a legit IoC container (now "service container"). Personally I'd
love a short term solution by proxy of the Injector, but yeah leaving the method as static
and then calling it via instance style -> is not a good idea (especially since doing so should issue warnings if you have the strict error level enabled). A better solution may be to convert the methods to instance level by removing the static keyword (obvious an API breaking change) and then start using the injector to instantiate and call it like normal.
So, since either approach would potentially be a lot of work and I assume would have to be implemented in SS4 anyway (given the API changes), maybe there should be a discussion (or RFC?) centered on implementing some sort of service provider/container/IoC abstraction? There are plenty of situations where a singleton instance (or global style) call would be performed from within core that a user may wish to override and not simply "->extend()". In my particular circumstance, I needed the ability to completely override the method instead of just extend, since I would need the ability to optionally return a $response ahead of time before the standard/default process proceeds (in some situations). So for me, since this is statically called, a facade/IoC call would have been perfect and easily implemented.
Situations like these have made me want to scrap it all and just re-implement the awesomeness of SilverStripe on a framework like Laravel, but that may a be sacrilege thing to say (albeit I know devs here from time to time will cite practices they've seen/learned in Laravel to help grow SS).