Antworten:
In Magento 2 Varien_Object
lautet die Entsprechung \Magento\Framework\DataObject.
Der Klassenname wurde von Object in DataObject geändert, da object ein reserviertes Wort in ist PHP 7
. Sie könnten also Folgendes verwenden:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Update 2018
Diese Antwort sollte die Antwort auf die ursprüngliche Frage so kurz wie möglich und nicht im Kontext eines realen Codebeispiels darstellen. Obwohl es die Frage beantwortet hat, \Magento\Framework\DataObject
handelt es sich um das Neue Varien_Object
, die Implementierung entsprach nicht zu 100% den Best Practices von Magento 2. Wie @MatthiasKleine hervorhob, besteht die beste Vorgehensweise von Magento 2 zum Erstellen von Objekten in Ihrem Code darin, mithilfe des Magentos DI-Frameworks eine Factory über den Konstruktor in Ihre Klasse einzufügen und diese Factory zum Erstellen Ihres Objekts zu verwenden. In diesem Sinne sollte die Verwendung von DI zum Erstellen eines DataObject in Ihrem eigenen Code ungefähr so aussehen:
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
würde ich argumentieren, dass es keinen Nutzen in Abhängigkeitsinjektion und Fabriken gibt. Es ist schließlich nur eine verherrlichte Reihe.
$obj->setData($item)
anstelle von zu verwenden. Auf $obj->setItem($item)
diese Weise können Sie jeden Feldwert für $obj
die direkte Verwendung der Methode abrufen. Wie $obj->getName()
etc.
Anstatt das Objekt mit "new" zu erstellen, sollten Sie DI (Dependency Injection) verwenden, um die Factory-Klasse zu injizieren, und diese Factory verwenden, um neue Instanzen von DataObjects zu erstellen.
/**
* @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();
}