Respostas:
Em Magento 2 o Varien_Object
equivalente é \Magento\Framework\DataObject.
O nome de classe foi mudado de objecto a objecto dataObject porque é uma palavra reservada no PHP 7
. Então você pode usar algo como:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Atualização 2018
Esta resposta pretendia ilustrar uma resposta da pergunta original da maneira mais sucinta possível e não no contexto de um exemplo de código real. Embora tenha respondido à pergunta, \Magento\Framework\DataObject
é a novidade Varien_Object
, a implementação não estava 100% alinhada com as melhores práticas do Magento 2. Como o @MatthiasKleine apontou, a melhor prática do Magento 2 para criar objetos no seu código é usar a estrutura Magentos DI para injetar uma fábrica em sua classe através do construtor e usar essa fábrica para criar seu objeto. Com isso em mente, usar o DI para criar um DataObject em seu próprio código deve ser algo como isto:
namespace My/Module;
class Example {
private $objectFactory;
public function __construct(
\Magento\Framework\DataObjectFactory $objectFactory
) {
$this->objectFactory = $objectFactory;
parent::__construct();
}
public function doSomething($item)
{
$obj = $this->objectFactory->create();
$obj->setData('item', $item);
//or
$obj->setItem($item);
}
}
DataObject
, eu argumentaria que não há benefício na injeção de dependência e nas fábricas. Afinal, é apenas uma matriz glorificada.
$obj->setData($item)
vez de $obj->setItem($item)
Dessa forma, você poderá obter qualquer valor de campo $obj
usando o método diretamente. Como $obj->getName()
etc.
Em vez de criar o objeto com 'novo', você deve usar DI (Injection Dependency Injection) para injetar a classe Factory e usá-lo para criar novas instâncias do DataObjects.
/**
* @var \Magento\Framework\DataObjectFactory
*/
private $dataObjectFactory;
public function __construct(
// ...
\Magento\Framework\DataObjectFactory $dataObjectFactory
) {
parent::__construct();
$this->dataObjectFactory = $dataObjectFactory;
}
public function yourCode()
{
$dataObject = $this->dataObjectFactory->create();
}