Zend certified PHP/Magento developer

Magento 2.3 usage of object manager in abstract code – good / bad / indifferent

I know what object manager is. I know why it is used. I know that as a general rule it shouldn’t be used. I know why from reading this. https://devdocs.magento.com/guides/v2.3/extension-dev-guide/object-manager.html#exceptions.

Then I see code like this

https://github.com/magento/magento2/blob/2.3/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Action/Full.php#L83-L85

public function __construct(
    [...]
    $this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()->get(
        ScopeConfigInterface::class
    );
    [...]
}

Which seams like an elegant way of doing it. Especially in something so abstract. So my questions are this:

  • a) Is the above still considered bad practice?

  • b) In this purely to maintain backward compatibility? Or is there another reason?