Ответы:
В Magento 2 Varien_Object
эквивалентом является \Magento\Framework\DataObject.
Имя класса, которое было изменено с Object на DataObject, потому что объект является зарезервированным словом в PHP 7
. Таким образом, вы можете использовать что-то вроде:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Обновление 2018
Этот ответ предназначен для того, чтобы проиллюстрировать ответ на исходный вопрос в максимально сжатой форме, а не в контексте реального примера кода. Хотя это и ответило на вопрос, \Magento\Framework\DataObject
является ли это новым Varien_Object
, реализация не на 100% соответствовала лучшей практике Magento 2. Как указал @MatthiasKleine, лучшая практика для создания объектов в вашем коде в Magento 2 - это использование DI-среды Magentos для внедрения фабрики в ваш класс через конструктор и использование этой фабрики для создания вашего объекта. Имея это в виду, использование DI для создания объекта DataObject в вашем собственном коде должно выглядеть примерно так:
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
, я бы сказал, что нет никакой выгоды в инъекции зависимостей и на фабриках. В конце концов, это просто прославленный массив.
$obj->setData($item)
вместо этого. $obj->setItem($item)
Таким образом, вы сможете получить любое значение поля при $obj
использовании метода напрямую. Как $obj->getName()
и т. Д.
Вместо создания объекта с «новым» вы должны использовать DI (Dependency Injection) для внедрения класса Factory и использовать эту фабрику для создания новых экземпляров 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();
}