A inicialização de objetos no Magento 2 é feita através do Object Manager. Ele é uma instância da classe Magento\Framework\ObjectManager\ObjectManager
que implementa a interface Magento\Framework\ObjectManagerInterface
em que encontramos três métodos:
// Cria uma nova instância de objeto. public function create($type, array $arguments = []); // Recupera uma instância do objeto em cache. public function get($type); // Configura o Object Manager public function configure(array $configuration);
namespace MyVendor\MyModule\Model use Magento\Framework\ObjectManagerInterface; class MyClass { protected $_objectManager; public function __construct( ObjectManagerInterface $objectManager ) { $this->_objectManager = $objectManager; } }
Por ser tão poderoso e importante para o sistema, devemos ter cuidado com o uso dele. É muito comum vermos projetos em que o Object Mananger foi instanciado de maneira direta, conforme abaixo:
//Get Object Manager Instance $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); //Load product by product id $product = $objectManager->create('Magento\Catalog\Model\Product')->load($id);
Apesar dessa maneira ser funcional, rápida, fácil e curta para se programar, não é uma boa prática a utilização do Object Manager de forma direta.
Sempre que programamos, devemos ter em mente boas práticas, reutilização do código, performance e etc.
Dúvidas? Posta aí!!!
Um abraço.