Відповіді:
У 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 для створення об'єктів у вашому коді є використання рамки Magentos DI для введення фабрики у свій клас через конструктор і використання цієї фабрики для створення вашого об'єкта. Зважаючи на це, використання 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()
т.д.
Замість того щоб створювати об’єкт 'new', слід використовувати 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();
}