It's definitely bad for a library like Doctrine. User-land implementations may (and will) need to use constructor to pass their own dependencies. See e.g. here: https://github.com/Kdyby/DoctrineCache/blob/master/src/Kdyby/DoctrineCache/Cache.php#L50-59