Answers:
在Magento 2 Varien_Object
当量的\Magento\Framework\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
using方法的任何字段值。像$obj->getName()
等等
代替使用“ new”创建对象,您应该使用DI(依赖注入)来注入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();
}